zoukankan      html  css  js  c++  java
  • CURL的使用

    CURL的使用
    
       libCURL是C语言写的URL下载库,它支持多种协议如FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP,
    
       它在多个平台上都能下载,比如Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, Linux, Dos, and more.
    
     
    
       它在Windows下以Com的方式使用.
    
    其使用所要调用的函数是:
    
    Curl_easy_init();
    
    Curl_easy_setopt();
    
    Curl_easy_perform();
    
    Curl_easy_getinfo();
    
    Curl_easy_cleanup();
    
     
    
     
    
    而其使用之前要做的工作是:
    
         ::CoInitialize(NULL);
    
    之后要做的工作是:
    
         ::CoUninitialize();
    
     
    
    而在下载时,会通过curl_easy_setopt()进行设置用户名,密码,远端下载路径,
    
    头回调函数,写回调函数,进度回调函数。开始执行函数。最后还能调用获取信息函数。
    
    而头回调函数,只是头调用一次,而写回调函数是要反复调用的,进度回调函数也是反复调用的,其是通过curl自身建立的线程调用的。
    
     
    
    CURL是开源的,可以查看其源代码,
    
    在easy.c中可以看其curl_easy_init()函数,
    
    函数为:
    
    CURL *curl_easy_init(void)
    
    {
    
      CURLcode res;
    
      struct SessionHandle *data;
    
     
    
     
    
      if(!initialized) {
    
        res = curl_global_init(CURL_GLOBAL_DEFAULT);
    
        if(res) {
    
         
    
          DEBUGF(fprintf(stderr, "Error: curl_global_init failed
    "));
    
          return NULL;
    
        }
    
      }
    
     
    
     
    
      res = Curl_open(&data);
    
      if(res != CURLE_OK) {
    
        DEBUGF(fprintf(stderr, "Error: Curl_open failed
    "));
    
        return NULL;
    
      }
    
     
    
      return data;
    
    }
    
     
    
    真正的函数全在里面。
    
    对于SessionHandle结构体可以看如下的定义:
    
    struct SessionHandle {
    
      struct Names dns;
    
      struct Curl_multi *multi;   
    
      struct Curl_one_easy *multi_pos;
    
      struct Curl_share *share;   
    
      struct SingleRequest req;   
    
      struct UserDefined set;     
    
      struct DynamicStatic change;
    
      struct CookieInfo *cookies; 
    
      struct Progress progress;   
    
     

  • 相关阅读:
    洛谷P3128 [USACO15DEC]Max Flow P 题解 树上差分(点差分)
    数列分块解决区间更新+区间最值问题
    ThinkPad P1 Gen3 4K 显示器出现间歇闪黑屏情况解决
    Qt自定义弹出式菜单(Qt自定义弹窗)
    软件产品易用性评价评估标准
    vue用echarts实现中国地图和世界地图
    知了业务逻辑梳理
    string.gfind string.gmatch
    无法定位程序输入点在 XXXX上...
    [Lua]c解析lua 嵌套table
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318502.html
Copyright © 2011-2022 走看看