zoukankan      html  css  js  c++  java
  • libcurl在windows下的使用

    • curl在linux下很好用,但到了windows下写程序却没办法使用了,这时候可以使用libcurl库
    • libcurl库的编译网上很多,我就不一一赘述了,curl的官方网站:https://curl.haxx.se/,下载下来根据README编译即可
    • 在使用libcurl的程序中,首先需要初始化libcurl的全局环境,意味着无论你要执行多少次的传输,都应该且只初始化一次:
    1 curl_global_init(CURL_GLOBAL_ALL);//该语句是全局初始化,在程序中只需要执行一次,而且初始化与释放配套,即初始化之后环境,在程序结束的时候需要清除该环境
    2 curl_global_cleanup();//该函数用来释放掉初始化的全局环境
    注意:请避免重复的调用curl_global_init和 curl_global_cleanup,他们每个仅被调用一次。
    • 全局初始化函数需要一个参数:
      • CURL_GLOBAL_ALL:表示初始化所有已知的内部子模块,一般都是使用这个宏
      • CURL_GLOBAL_WIN32:只被应用在windows系统上,初始化win32套接字
      • CURL_GLOBAL_SSL:初始化与ssl相关的环境
      • CURL_GLOBAL_NOTHING:没有额外的初始化
    • 在初始化全局环境之后,就可以使用libcurl了,为了使用libcurl提供的简单借口,需要创建一个简单借口的句柄:
    //初始化简单接口的句柄,每一个简单的接口通信都需要一个句柄,也就是说需要为每个准备传输数据的线程都创建一个句柄,句柄不能共享
    CURL *curl = curl_easy_init();
    //初始化之后需要判空,判断句柄是否初始化成功了
    if(curl == NULL){/*打印日志,初始化失败*/}
    • 得到句柄curl之后,可以在这个句柄中设置多个选型
     1  //设置curl的信息
     2  函数原型:CURLcode curl_easy_setopt(CURL *curl, CURLoption option, …);
     3  
     4  //设置防止301,302重定向
     5  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION,0);
     6 
     7 //当需要对响应的数据进行解析的话,就需要一个回调函数取到返回数据
     8 //string 就是要解析的返回数据
     9 string content;
    10 long retcode = 0;//http的返回码,判断响应
    11 
    12  curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
    13  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &process_data);
    14  //准备发送request的url
    15  curl_easy_setopt(curl, CURLOPT_URL, "url"); 
    16  //当发送的url请求是需要验证用户名密码的,也可以将用户名和密码设置到句柄内
    17  curl_easy_setopt(curl, CURLOPT_USERPWD, "username:password");
    18 
    19 //都设置完成之后就可以执行了
    20 curl_easy_perform(curl);
    21 
    22 CURLcode result = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE , &retcode);
    23 
    24 if ( (result != CURLE_OK) || retcode != 200 ){/*
    25     CURLE_OK 代表 curl的错误代码,ok代表成功
    26 
    27 */}
    28 
    29 //到这里一个完整的libcurl请求就发送出去了,在结束时还需要将句柄删除掉,就是说每一次init都需要一个对应的cleanup
    30 curl_easy_cleanup(curl);
    • 获取返回数据的方法代码如下:
    1 static size_t process_data(void *data, size_t size, size_t nmemb, string &content)
    2 {
    3     long sizes = size * nmemb;
    4     string temp;
    5     temp = string((char*)data,sizes);
    6     content += temp;
    7     return sizes;
    8 
    9 }
  • 相关阅读:
    暑假第五周报告
    读《大道至简》有感
    暑假第四周报告
    暑假第三周报告
    暑假第二周报告
    暑假第一周报告
    对15号夏壹队的TD信息通——teamfinal的使用体验
    Django易混淆问题
    MySQL常见问题
    Django框架的理解和使用的常见问题
  • 原文地址:https://www.cnblogs.com/danielStudy/p/6607825.html
Copyright © 2011-2022 走看看