欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
linux使用libcurl實(shí)現put訪(fǎng)問(wèn)服務(wù)器

http://blog.csdn.net/zengraoli/article/details/11580525

2013

   Libcurl為一個(gè)免費開(kāi)源的,客戶(hù)端curl傳輸庫,FTP,FTPS,TFTP,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP,跨平臺,支持Windows,Unix,Linux等,線(xiàn)程安全,支持Ipv6。并且易于使用。


  關(guān)于libcurl具體用法:
1、初始化應用程序在使用libcurl之前,必須先初始化libcurl。libcurl只需初始化一次??梢允褂靡韵抡Z(yǔ)句進(jìn)行初始化:

curl_global_init();


2、CURL *curl_easy_init() 此函數需要最先被調用,返回CRUL easy句柄;后續其他函數調用都要用到這個(gè)句柄。如果沒(méi)有調用curl_global_init(),該函數自動(dòng)調用,但是考慮到線(xiàn)程安全的問(wèn)題,最好自己調用curl_global_init()。


3、參數和選項設置都是通過(guò)以下函數完成的,它告訴libcurl怎樣去進(jìn)行傳輸CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter)
參數handle即為curl_easy_init()返回的句柄,后 面根據option的類(lèi)型,設置相應的parameter值,該函數每次調用只能設置一個(gè)選項。


4、curl_easy_perform 函數說(shuō)明(error 狀態(tài)碼).該函數完成curl_easy_setopt指定的所有選項,本節重點(diǎn)介紹curl_easy_perform的返回值。返回0意味一切ok,非0代表錯誤發(fā)生。
通過(guò)以上的了解,實(shí)現文件的上傳功能,即http的put功能。
代碼如下:

 

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <fcntl.h>  
  4. #include <sys/stat.h>  
  5. #include <unistd.h>  
  6. #include <curl/curl.h>  
  7. #include <curl/types.h>  
  8. #include <curl/easy.h>  
  9.   
  10.   
  11.   
  12. #include <stdarg.h>   
  13. #include <string.h>   
  14. #include <errno.h>   
  15. #include <check_error.h>   
  16.   
  17.   
  18. FILE *fp; //定義FILE類(lèi)型指針  
  19.   
  20. //重寫(xiě)把數據讀入上傳數據流函數   
  21. size_t read_file(void* buff, size_t size, size_t nmemb, void* userp)   
  22. {   
  23.     size_t sizes = fread(buff, size, nmemb, (FILE *)userp);   
  24.     return sizes;   
  25. }   
  26.     
  27. int main(int argc,char **argv)  
  28. {   
  29.     CURLcode res; //easy_handle定義的一些錯誤碼   
  30.     const char url[2096];  
  31.    //初始化libcurl   
  32.     
  33.      if(argc!=3)  
  34.     {  
  35.         printf("please input url and filename");  
  36.         exit(-1);  
  37.     }  
  38.      res = curl_global_init(CURL_GLOBAL_ALL);   
  39.     if (res != CURLE_OK)   
  40.     {   
  41.         printf("init libcurl failed.\n" );   
  42.        return -1;   
  43.     }   
  44.      
  45.       
  46.     //獲取要上傳的文件指針   
  47.    FILE* r_file = fopen(argv[2], "rb");   
  48.     if (0 == r_file)   
  49.     {   
  50.        printf( "the file %s isnot exit\n",argv[2]);   
  51.       return -1;   
  52.     }   
  53.     
  54.     CURL* easy_handle;   
  55.     
  56.     easy_handle = curl_easy_init();   
  57.     if (0 == easy_handle)   
  58.    {   
  59.        printf( "get a easy_handle handle fail!");   
  60.        fclose(r_file);   
  61.        curl_global_cleanup();   
  62.        curl_easy_cleanup(easy_handle);   
  63.        return -1;   
  64.    }   
  65.    
  66.     // 獲取文件大小   
  67.    fseek(r_file, 0, 2);   
  68.    int file_size = ftell(r_file);   
  69.    rewind(r_file);   
  70.     
  71.    curl_easy_setopt(easy_handle, CURLOPT_URL, argv[1]); //獲取URL地址   
  72.    curl_easy_setopt(easy_handle, CURLOPT_UPLOAD, 1); //告訴easy_handle是做上傳操作   
  73.    curl_easy_setopt(easy_handle, CURLOPT_READFUNCTION, &read_file); //調用重寫(xiě)的讀文件流函數   
  74.    curl_easy_setopt(easy_handle, CURLOPT_READDATA, r_file); //往read_file()函數中傳入用戶(hù)自定義的數據類(lèi)型   
  75.    curl_easy_setopt(easy_handle, CURLOPT_INFILE, r_file); //定位作為上傳的輸入文件   
  76.    curl_easy_setopt(easy_handle, CURLOPT_VERBOSE, 1); //打印出具體http協(xié)議字段  
  77.    //curl_easy_setopt(easy_handle, CURLOPT_HEADER, 1);  
  78.    curl_easy_setopt(easy_handle, CURLOPT_INFILESIZE, file_size); //上傳的字節數   
  79.   
  80.     //執行設置好的操作   
  81.     res = curl_easy_perform(easy_handle);   
  82.    
  83.    //獲取HTTP錯誤碼   
  84.    int HTTP_flag = 0;   
  85.     curl_easy_getinfo(easy_handle, CURLINFO_RESPONSE_CODE , &HTTP_flag);   
  86.    
  87.   //一般清理動(dòng)作   
  88.    fclose(r_file);   
  89.    curl_global_cleanup();   
  90.    curl_easy_cleanup(easy_handle);   
  91.      
  92.    printf("url :%s localfile: %s\n",argv[1],argv[2]);  
  93.    printf("HTTP_flag is %d\n",HTTP_flag);  
  94.   
  95. // printf( "操作本地文件: file_name url:\n");   
  96.    //檢測HTTP錯誤碼和執行操作結果   
  97.    if (CURLE_OK != res)   
  98.    {   
  99.         printf("failure\n");   
  100.        return -1;   
  101.    }   
  102.     else   
  103.     {   
  104.       printf("success\n");   
  105.       return 0;   
  106.     }   
  107.   
  108.  }  

轉載自:http://blog.chinaunix.net/uid-27766566-id-3474454.html

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
MFC中通過(guò)CURL 下載,斷點(diǎn)續傳,
libcurl庫介紹
libcurl應用:如何把下載內容寫(xiě)入內存
cURL函數庫錯誤碼說(shuō)明之PHP curl_errno函數 | 一聚教程網(wǎng)
對CURL的一些研究 - ChinaUnix.net
libcurl
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久