#include <stdio.h> #include <curl/curl.h> #include <string.h> typedef unsigned int bool; #define true 1 #define false 0 size_t readData( void *ptr, size_t size, size_t nmemb, void *stream) { char buf[1024]={'\0'}; strncpy(buf,ptr,1024); printf("================get data=============================\n"); printf("%s\n",buf); } bool postUrl() { CURL *curl; CURLcode res; char img1[12]; char img2[12]; char *key="4gk7iKdrBpLZsz3Wc5YskV"; char *secret="bcda1b84db53434eaa85d8f5f8078eeb"; int typeId=21; char *format="xml"; char *postString; postString=(char*)malloc(strlen(key)+strlen(secret)+2048); sprintf(postString,"&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s","","",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); //将返回的http头输出到readData指向的文件 res = curl_easy_perform(curl); printf("%d\n",res); curl_easy_cleanup(curl); } fclose(fp); return true; } int main(void) { // getUrl("/tmp/get.html"); postUrl(); }
编译:
gcc demo2.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl
运行:./a.out
运行结果为1,表示错误,原因是编译的结果只支持http,而调用的接口使用的是https,因此需要ssl
HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性 。
1、下载安装openssl
①linux下载安装(wget是linux的是一个网络上进行下载的简单而强大的自由软件)
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz
②解压
tar xvf openssl-1.1.1a.tar.gz
③安装
./config
make
echo $~
echo ~(查看echo的文件夹)
sudo make install
2、重新配置生成能访问https的lib库
./configure --prefix=$PWD/_install --with-ssl
make
make install
cd ./_install/lib(ls -l进入可以看到链接的库)
3、重新进行编译
yzr@ubuntu:~/Desktop/httpHandler$ gcc demo2.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl
yzr@ubuntu:~/Desktop/httpHandler$
yzr@ubuntu:~/Desktop/httpHandler$
yzr@ubuntu:~/Desktop/httpHandler$ ls
a.out curl-7.71.1 curl-7.71.1.tar.bz2 demo1.c demo2.c openssl-1.1.1a openssl-1.1.1a.tar.gz
yzr@ubuntu:~/Desktop/httpHandler$ ./a.out
================get data=============================
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><data><message><status>-7</status><value>必传参数为空</value></message></data>
23
yzr@ubuntu:~/Desktop/httpHandler$
以上必传参数为空表示没有传图片