#include
#include
#include
#include
#include
#include
#include
#include
#define true 1
#define false 2
typedef unsigned int bool;
char buf[1024] = {
'\0'};
size_t readData( void *ptr, size_t size, size_t nmemb, void *stream)
{
char buf[1024] = {
'\0'};
strcpy(buf,ptr);
printf("%s\n",buf);
}
bool postUrl()
{
CURL *curl;
CURLcode res;
char *postString;
char img1[1024];
char img2[1024];
//ocr平台所需要的参数
char *key = ""; //此处加入ocr平台的key
char *secret = ""; //ocr平台的secret
int typeld = 21;
char *format = "xml";
int len = strlen(img1)+strlen(img2)+strlen(key)+strlen(secret)+128;
postString = (char *)malloc(len);
memset(postString,'\0',len);
sprintf(postString,"&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s",img1,img2,key,secret,21,format);
curl = curl_easy_init();
if (curl)
{
//curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString); // 指定post内
curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do "); // 指定url库
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData);
res = curl_easy_perform(curl);
printf("ok!%d\n",res);
curl_easy_cleanup(curl);
}
return true;
}
int main(void)
{
postUrl();
}
由于该方案使用的是https协议,之前编译出的libcurl不支持ssl,所以需要重新编译
删除之前编译出来的_install文件
阅读docs中INSTALL.md文件,查看编译步骤,发现如果需要支持SSL需要进行在config中加入如下选项
退出docs目录进行如下操作
但是配置后显示没有openssl库所以需要下载openssl库
读README
需要打开INSTALL
按照步骤安装,其中./config不使用–prefix,会安装到默认路径(usr/local);make test可以省略,之后的make install需要加sudo;
继续到curl文件夹中安装ssl
安装完之后在make,编译curl
安装make install
接下来就可以编译post请求的代码,并执行,由于图片没有上传所以会出现必传参数为空字样
将图片放入进去
Base64:
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。使用Base64编码具有不可读性,需要解码才能阅读。
图片可以利用LInux下base64命令转换成base64格式;
在代码中使用system将base64格式存放到临时文件中;
#include
#include
#include
#include
#include
#include
#include
#include
#define true 1
#define false 2
typedef unsigned int bool;
char buf[1024] = {
'\0'};
size_t readData(void *ptr, size_t size, size_t nmemb, void *stream)
{
strcpy(buf,ptr);
printf("%s\n",buf);
}
char* getPicBase64(char *filePath) //获取64位编码函数
{
char *bufPic = NULL;
char cmd[128] = {
'\0'};
sprintf(cmd,"base64 %s > tmpFile",filePath); //拼接base64 filePath > tmpfile
system(cmd); //使用system函数将base64格式放到tmpfile中
int fd = open("./tmpFile",O_RDWR); //打开tmpfile文件
int fileLen = lseek(fd,0,SEEK_END); //利用光标获取文件的大小
lseek(fd,0,SEEK_SET); //将光标返回到文件起始位置
bufPic = (char *)malloc(sizeof(char)*(fileLen+2)); //为buf开辟空间
memset(bufPic,'\0',fileLen+2); //初始化buf
read(fd,bufPic,fileLen); //将tmpfile中的内容读到buf中
close(fd); //关闭文件
system("rm -rf tmpfile"); //删除文件,第二张图片调用该函数是重新创建,并且base64格式是从文件起始位置写入
return bufPic; //将buf返回
}
bool postUrl()
{
CURL *curl;
CURLcode res;
char *postString;
char img1[1024];
char img2[1024];
char *key = "";
char *secret = "";
int typeld = 21;
char *format = "xml";
char *bufPic1 = getPicBase64("./mi.jpeg"); //调用函数获取base64编码
char *bufPic2 = getPicBase64("./mi2.jpeg");
int len = strlen(img1)+strlen(img2)+strlen(key)+strlen(secret)+strlen(bufPic1)+strlen(bufPic2)+124;
postString = (char *)malloc(len);
memset(postString,'\0',len);
sprintf(postString,"&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s",bufPic1,bufPic2,key,secret,21,format);
curl = curl_easy_init();
if (curl)
{
//curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postString); // 指定post内
curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do "); // 指定url库
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData);
res = curl_easy_perform(curl);
printf("ok!%d\n",res);
curl_easy_cleanup(curl);
}
return true;
}
int main(void)
{
postUrl();
}