colorful

zc qq:1337220912

 

libcurl

最近项目要上QQ平台, 用到腾迅开放平台的SDK,  SDK使用的是libcurl. 发现很多bug,
其中最大的问题是, sdk在单线程下正常, 在多线程下就蹦, 后来研究发现 是curl_easy_getinfo第三个参数需要的是long, 而SDK传给它的是int, 其它地方还有类似的错误.
哎,腾迅也是坑爹啊.

-------------------------------------------------------------

1.libcurl中常用的API

#include <curl/curl.h>

 

CURL *curl_easy_init()

必须第一个调用,返回一个CURL指针,用于表示当前的curl会话。

如果之前没有执行curl_global_init(long flags),则它会自动先执行。

但是由于curl_global_init(long flags)和其调用的函数在多线程中是不安全的,所以多线程程序中必须在其它线程启动之前执行curl_global_init(long flags)。


void curl_easy_cleanup(CURL * handle )

会话结束后调用,以清除一个CURL * handle


CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter)

设置libcurl执行参数


CURLcode curl_easy_perform(CURL * handle)

根据设置的参数执行网络数据传输,在初始化和参数设置后调用


CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... )

获取所指向的libcurl会话的执行信息

 

2.libcurl最简单使用流程

 

#include <stdio.h>
#include <curl/curl.h>
 
int main(void)
{
  CURL *curl;
  CURLcode res;

  int response;
 

  res = curl_global_init(CURL_GLOBAL_ALL);

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se");
    res = curl_easy_perform(curl);
    res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response); 


   
    curl_easy_cleanup(curl);
  }

  curl_global_cleanup();
  return 0;
}

 

3.libcurl使用实例

更多的使用示例可以参考官方网站上的以下网页

http://curl.haxx.se/libcurl/c/example.html

 

 

参考资料:

http://curl.haxx.se


 

posted on 2013-08-27 16:12 多彩人生 阅读(564) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(3)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜