• libcurl


    一、libcurl

    主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。, libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传(当然你也可以使用PHP的ftp扩展), HTTP基本表单上传,代理,cookies,和用户认证

    二、利用libcurl 下载文件代码例程

    #include <stdio.h>
    #include <curl/curl.h>
    //#include <curl/types.h> /* new for v7 */
    #include <curl/easy.h> /* new for v7 */
      
     ////这个函数是为了符合CURLOPT_WRITEFUNCTION而构造的
     //完成数据保存功能
     size_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
     {
       return fwrite(ptr, size, nmemb, stream);
     }
     //这个函数是为了符合CURLOPT_READFUNCTION而构造的
     //数据上传时使用
     size_t my_read_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
     {
       return fread(ptr, size, nmemb, stream);
     }
     //这个函数是为了符合CURLOPT_PROGRESSFUNCTION而构造的
     //显示文件传输进度,t代表文件大小,d代表传 输已经完成部分
     int my_progress_func(void *bar,
                          double t, /* dltotal */
                          double d, /* dlnow */
                          double ultotal,
                          double ulnow)
     {
       printf("%f / %f (%g %%)
    ", d, t, d*100.0/t);
       //printf("
    33[?25l%f / %f (%g %%)33[?25h", d, t, d*100.0/t);
       return 0;
     }
      
     void *my_thread(void *ptr)
     {
       CURL *curl;
       CURLcode res;
       FILE *outfile;
       char *url = ptr;
      
       curl = curl_easy_init();
       if(curl)
       {
         outfile = fopen("test.zip", "w");
      
         curl_easy_setopt(curl, CURLOPT_URL, url);
         curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
         curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_func);
         curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func);
         curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
         curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);
        // curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);
      
         res = curl_easy_perform(curl);
      
         fclose(outfile);
         /* always cleanup */
         curl_easy_cleanup(curl);
       }
      
       return NULL;
     }
      
     int main(int argc, char **argv)
     {
      
       /* Must initialize libcurl before any threads are started */
       curl_global_init(CURL_GLOBAL_ALL);
    
       //if (!g_thread_create(&my_thread, argv[1], false, NULL) != 0)
         //g_warning("can't create the thread");
       my_thread(argv[1]);
       while(1) {
           sleep(2);
       }
       return 0;
     }

     三、curl_easy_perform(curl) 返回值

    CURLE_OK = 0, 0: no error  
    CURLE_UNSUPPORTED_PROTOCOL, 1: unsupported protocol  
    CURLE_FAILED_INIT, 2: failed init  
    CURLE_URL_MALFORMAT, 3: URL using bad/illegal format or missing URL  
    CURLE_URL_MALFORMAT_USER, 4: unknown error  
    CURLE_COULDNT_RESOLVE_PROXY, 5: couldn’t resolve proxy name  
    CURLE_COULDNT_RESOLVE_HOST, 6: couldn’t resolve host name  
    CURLE_COULDNT_CONNECT, 7: couldn’t connect to server  
    CURLE_FTP_WEIRD_SERVER_REPLY, 8: FTP: weird server reply  
    CURLE_FTP_ACCESS_DENIED,9  
    CURLE_FTP_USER_PASSWORD_INCORRECT, 10: unknown error  
    CURLE_FTP_WEIRD_PASS_REPLY, 11: FTP: unknown PASS reply  
    CURLE_FTP_WEIRD_USER_REPLY, 12: FTP: unknown USER reply  
    CURLE_FTP_WEIRD_PASV_REPLY, 13: FTP: unknown PASV reply  
    CURLE_FTP_WEIRD_227_FORMAT, 14: FTP: unknown 227 response format  
    CURLE_FTP_CANT_GET_HOST, 15: FTP: can’t figure out the host in the PASV response  
    CURLE_FTP_CANT_RECONNECT, 16: FTP: can’t connect to server the response code is unknown  
    CURLE_FTP_COULDNT_SET_BINARY, 17: FTP: couldn’t set binary mode  
    CURLE_PARTIAL_FILE, 18: Transferred a partial file  
    CURLE_FTP_COULDNT_RETR_FILE, 19: FTP: couldn’t retrieve (RETR failed) the specified file  
    CURLE_FTP_WRITE_ERROR, 20: FTP: the post-transfer acknowledge response was not OK  
    CURLE_FTP_QUOTE_ERROR, 21: FTP: a quote command returned error  
    CURLE_HTTP_RETURNED_ERROR, 22: HTTP response code said error  
    CURLE_WRITE_ERROR, 23: failed writing received data to disk/application  
    CURLE_MALFORMAT_USER, 24: unknown error  
    CURLE_UPLOAD_FAILED, 25: upload failed (at start/before it took off)  
    CURLE_READ_ERROR, 26: failed to open/read local data from file/application  
    CURLE_OUT_OF_MEMORY, 27: out of memory  
    CURLE_OPERATION_TIMEOUTED, 28: a timeout was reached  
    CURLE_FTP_COULDNT_SET_ASCII, 29: FTP could not set ASCII mode (TYPE A)  
    CURLE_FTP_PORT_FAILED, 30: FTP command PORT failed  
    CURLE_FTP_COULDNT_USE_REST, 31: FTP command REST failed  
    CURLE_FTP_COULDNT_GET_SIZE, 32: FTP command SIZE failed  
    CURLE_HTTP_RANGE_ERROR, 33: a range was requested but the server did not deliver it  
    CURLE_HTTP_POST_ERROR, 34: internal problem setting up the POST  
    CURLE_SSL_CONNECT_ERROR, 35: SSL connect error  
    CURLE_BAD_DOWNLOAD_RESUME, 36: couldn’t resume download  
    CURLE_FILE_COULDNT_READ_FILE, 37: couldn’t read a file
    CURLE_LDAP_CANNOT_BIND, 38: LDAP: cannot bind  
    CURLE_LDAP_SEARCH_FAILED, 39: LDAP: search failed  
    CURLE_LIBRARY_NOT_FOUND, 40: a required shared library was not found 
  • 相关阅读:
    基于LR的新闻文本分类
    NLTK最详细功能介绍
    11 Spark案例
    自然语言处理TF-IDF实践Demo
    NLP模型
    数据仓库
    SVN
    【E-26】ERROR: Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory: '/opt/miniconda3/lib/python3.7/site-packages/mistune-0.8.4.dist-info/METADATA'
    【ML-7-2-1】聚类算法-KNN实践
    【E-25】ValueError: day is out of range for month
  • 原文地址:https://www.cnblogs.com/jly594761082/p/10364281.html
Copyright © 2020-2023  润新知