h5技术建设网站,app费用,关于网站建设的参考文献,苏州建设建设信息网站一、libcurl简介libcurl是一个跨平台的网络协议库#xff0c;支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权#xff0c;HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传#xff0c;代理#xff0c;cookies,和用户认证。…一、libcurl简介libcurl是一个跨平台的网络协议库支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传代理cookies,和用户认证。libcurl的官网 http://curl.haxx.se/ 库下载Release 7.71.1 · curl/curl · GitHub二、libcurl的使用调用curl_global_init()初始化libcurl调用curl_easy_init()函数得到 easy interface型指针调用curl_easy_setopt()设置传输选项根据curl_easy_setopt()设置的传输选项实现回调函数以完成用户特定任务调用curl_easy_perform()函数完成传输任务调用curl_easy_cleanup()释放内存三、libcurl等第三方库的通用编译方法1.下载libcurl库库下载https://github.com/curl/curl/releases/tag/curl-7_71_12.下载好拖到ubuntu下解压库文件tar xvf curl-7.71.1.tar.bz23.解压好后进去生成的文件目录后续学习需要用到的库开源目录包基本都长这样我们要看库的使用说明文件README或者docs目录下的INSTALL作者会告诉你怎么安装使用库。4.找到UNIX环境安装说明5.把库的包开源包配置安装在指定文件夹 ./configure6.配置完后make编译7.编译完后make install安装拷贝8.可以看到我们刚开始配置的文件夹_install下载的库就在lib目录里面xxx.a是静态文件 xxx.so是动态文件 四、调用libcurl编程访问百度主页1.代码#include stdio.h
#include curl/curl.htypedef unsigned int bool;//数据类型别名用typedef 有分号
#define true 1 //宏定义替换用define 无冒号
#define false 0bool getUrl(char *filename)//GET请求
{CURL *curl;CURLcode res;FILE *fp;if ((fp fopen(filename, w)) NULL) // 返回结果用文件存储return false;struct curl_slist *headers NULL;headers curl_slist_append(headers, Accept: Agent-007);curl curl_easy_init(); // 初始化if (curl){//curl_easy_setopt(curl, CURLOPT_PROXY, 10.99.60.201:8080);// 代理curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 改协议头curl_easy_setopt(curl, CURLOPT_URL,http://www.baidu.com);curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); //将返回的http头输出到fp指向的文件,//即为filename文件而主函数传入的参数是 /tmp/get.html即为真正保存在get.html文件中curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp); //将返回的html主体数据输出到fp指向的文件res curl_easy_perform(curl); // 执行if (res ! 0) {curl_slist_free_all(headers); //释放句柄curl_easy_cleanup(curl);}fclose(fp);return true;}
}
bool postUrl(char *filename)//POST请求
{CURL *curl;CURLcode res;FILE *fp;if ((fp fopen(filename, w)) NULL)return false;curl curl_easy_init();if (curl){curl_easy_setopt(curl, CURLOPT_COOKIEFILE, /tmp/cookie.txt); // 指定cookie文件curl_easy_setopt(curl, CURLOPT_POSTFIELDS, logintypeuiduxieyanpswxxx86); // 指定post内容用户信息 字段之间连接尝试登陆新浪邮箱//curl_easy_setopt(curl, CURLOPT_PROXY, 10.99.60.201:8080);curl_easy_setopt(curl, CURLOPT_URL, http://mail.sina.com.cn/cgi-bin/login.cgi ); // 指定urlcurl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);res curl_easy_perform(curl);//执行curl_easy_cleanup(curl);}fclose(fp);return true;
}
int main(void)
{getUrl(/tmp/get.html);postUrl(/tmp/post.html);
}
#define true 1#define false 0 //宏定义typedef unsigned int bool; //定义无符号的整型把bool转换成int类型因为c语言不支持bool类型2、编译注意编译时链接库、头文件路径运行需添加动态库为环境变量链接库和头文件再编译同时注意指明他们的路径gcc test1.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurltest1.c 文件名 ./curl-7.71.1/_install/include/ 头文件的路径-./curl-7.71.1/_install/lib/ 库的路径注意动态库静态库的链接用-L而头文件用-I查看编译结果在文件目录下多了一个a.out文件运行a.out时发现报错解决上述问题的办法配置下环境变量export LD_LIBRARY_PATH./curl-7.71.1/_install/lib找到刚才程序运行出来的结果vi /tmp/get.html