libcurl使用 联系客服

发布时间 : 星期日 文章libcurl使用更新完毕开始阅读be14da36f705cc175427098b

13. curl_easy_cleanup(easy_handle); 14. curl_global_cleanup(); 15.

16. return 0; 17. }

在asp.net Web服务器上跟踪调试,得到客户程序提交上来的数据,下面是截图:

上面的代码够简单吧~_~ 有时候,我们需要提交一些二进制数据到HTTP服务器,使用方法一就不行了,因为方法一中实际提交的是一个字符串,字符串遇到\\0就表示结束了。所以在上传二进制数据的时候,必须明确的告诉libcurl要提交的数据的长度。在上传二进制数据的时候,还应该设置提交的Content-Type头信息。下面的示例代码: 1. 2. 3. 4. 5.

int main(int argc, char **argv) {

curl_global_init(CURL_GLOBAL_WIN32); CURL *easy_handle = curl_easy_init();

6. // 上传二进制数据

7.

8. char data[] = { 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0 }; 9. curl_slist *http_headers = NULL;

10. http_headers = curl_slist_append(http_headers, \text/xml\); 11.

12. curl_easy_setopt(easy_handle, CURLOPT_HTTPHEADER, http_headers);

13. curl_easy_setopt(easy_handle, CURLOPT_URL, http://localhost:2210/Default.aspx); 14.

15. curl_easy_setopt(easy_handle, CURLOPT_POSTFIELDS, data);

16. curl_easy_setopt(easy_handle, CURLOPT_POSTFIELDSIZE, sizeof(data)); 17.

18. curl_easy_perform(easy_handle); 19.

20. curl_slist_free_all(http_headers); 21. curl_easy_cleanup(easy_handle); 22. curl_global_cleanup(); 23.

24. return 0; 25. }

在asp.net Web服务器上跟踪调试,得到客户程序提交上来的二进制数据,下面是截图:

上面介绍的两种方式,可以完成大部分的HTTP POST操作。但上面的两种方式都不支持multi-part formposts。Multi-part formposts被认为是提交二进制数据(或大量数据)的更好方法,可以在RFC1867, RFC2388中找到他们的定义。何为Multi-part?其实,就我理解,就是在Post提交的时候,有不同的数据单元,每个单元有自己的名称与内容,内容可以是文本的,也可以是二进制的。同时,每个数据单元都可以有自己的消息头,MIME类型,这些数据单元组成一个链表,提交到HTTP服务器。 libcurl提供了方便的api用于支持multi-part formposts。使用curl_formadd函数,可以添加不同的数据数据单元,然后提交到服务器。下面是一个

multi-part formposts的例子(更详细的使用,请参考:http://curl.haxx.se/libcurl/c/curl_formadd.html ): 1. 2. 3. 4. 5.

int main() {

curl_global_init(CURL_GLOBAL_WIN32); CURL *easy_handle = curl_easy_init();

6. // 使用multi-parts form post

7.

8. curl_easy_setopt(easy_handle, CURLOPT_URL, http://localhost:2210/Default.aspx); 9.

10. curl_httppost *post = NULL; 11. curl_httppost *last = NULL; 12.

13. // 文本数据

14.

15. curl_formadd(&post, &last, CURLFORM_COPYNAME, \, CURLFORM_COPYCONTENTS, \, CURLFORM_END);

16. curl_formadd(&post, &last, CURLFORM_COPYNAME, \, CURLFORM_COPYCONTENTS, \, CURLFORM_END); 17.

18. // 文本文件中的数据

19.

20. curl_formadd(&post, &last, CURLFORM_COPYNAME, \, CURLFORM_FILECONTENT, \, CURLFORM_END); 21. curl_easy_setopt(easy_handle, CURLOPT_HTTPPOST, post); 22. curl_easy_perform(easy_handle); 23.

24. curl_formfree(post);

25. curl_easy_cleanup(easy_handle); 26. curl_global_cleanup(); 27.

28. return 0; 29. }