• 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;   
    
     

  • 相关阅读:
    梯度下降_机器学习-李宏毅
    LeTex算法伪代码环境
    数据结构之线性表
    Java中的初始化块、构造器、静态初始化块的执行顺序
    Java中的内省(introspector)
    JSP (Java Server Page)
    eclipse的web工程默认部署到了哪里
    Persistence机制(永久保存/序列化Serialize)
    VC++中使用正则表达式RegExp
    Java中解析和生成xml
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318502.html
Copyright © 2020-2023  润新知