libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证
libcurl的官网: http://curl.haxx.se/
库下载地址: https://github.com/curl/curl/releases/tag/curl-7_71_1
初始化libcurl:
函数得到 easy interface型指针:
设置传输选项:
设置的传输选项,实现回调函数以完成用户特定任务:
函数完成传输任务:
释放内存:
CURLcode curl_global_init(long flags);函数只能用一次。(其实在调用curl_global_cleanup 函数后仍然可再用)
如果这个函数在curl_easy_init函数调用时还没调用,它讲由libcurl库自动调用,
所以多线程下最好主动调用该函数以防止在线程中curl_easy_init时多次调用。
注意:虽然libcurl是线程安全的,但curl_global_init是不能保证线程安全的,
所以不要在每个线程中都调用curl_global_init,应该将该函数的调用放在主线程中。
写入此函数避免出现上述风险:
- 参数:flags
在C++中使用libcurl实现HTTP POST和GET的源码如下:
这个类中包含了两个公共方法Post和Get,用于实现HTTP的POST和GET请求。
它们接受一个URL参数和可选的请求数据,以及一个用于存储响应的字符串引用。
在使用这个类之前,需要先创建一个实例,并调用Post或Get方法。
如果请求成功,方法会返回true,并将服务器响应存储在传递的response字符串中。
否则,它将返回false,response将保持为空字符串。
在 StackOverFlow 中有一则关于 Put 操作的问题:https://stackoverflow.com/questions//send-string-in-put-request-with-libcurl
其中的回答有说:Dont use
比较好的写法是如此:
比较好奇 why 这样,结果查询 LibCurl 官方的资料说:CURLOPT_PUT 已经被弃用了(简单明了,所以正确的使用姿势应该保证是 CURLOPT_UPLOAD Option)
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/2908.html