windows下面使用libcurl

來源:互聯網
上載者:User

1. 下載安裝

下載 libcurl -- http://curl.haxx.se/dlwiz/

tortoise svn has libsasl library

 

2. 設定windows環境變數

LIBCURL_ROOT -- libcurl 存放路徑,比如 E:/opensdk/libcurl-7.19.3

 

3. 設定VS工程屬性,添加$(LIBCURL_ROOT)/include, $(LIBCURL_ROOT)/lib, 動態連結添加curllib.lib,靜態連結添加curllib_static.lib

靜態連結需添加如下東西:

#pragma comment ( lib, "ws2_32.lib" )
#pragma comment ( lib, "wldap32.lib" )

CURL_STATICLIB

If you’re using libcurl as a win32 DLL, you MUST use the CURLOPT_WRITEFUNCTION if you set CURLOPT_
WRITEDATA - or you will experience crashes.

 

4. 使用libcurl操作HTTP協議必須考慮的問題:

4.1 操作是同步還是非同步?

easy 介面是同步。

4.2 是否安全執行緒?

絕對不應該線上程之間共用同一個libcurl handle,不管是easy handle還是multi handle, libcurl是安全執行緒的, 其它依賴的庫是否安全執行緒?

4.3 是否可在高並發情況下使用?

4.4 使用何種license(MIT)

4.5 如何設定http 請求的方法(POST, GET or other), 頭部,協議版本號碼(HTTP/1.0 or HTTP/1.1)

4.6 如何獲得返回的status code, 頭部,協議版本號碼(HTTP/1.0 or HTTP/1.1)

curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);

curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "SETUP");

 curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);

4.7

CURLOPT_HEADERFUNCTION,CURLOPT_HEADERDATA
回呼函數原型為 size_t function( void *ptr, size_t size,size_t nmemb, void *stream); libcurl一旦接收到http 頭部資料後將調用該函數。CURLOPT_WRITEDATA 傳遞指標給libcurl,該指標表明CURLOPT_HEADERFUNCTION 函數的stream指標的來源

 

// 註冊回呼函數curl_easy_setopt(easy_handle, CURLOPT_READFUNCTION, read_function); // 設定自訂指標curl_easy_setopt(easy_handle, CURLOPT_READDATA, &filedata); 
curl_easy_setopt(easy_handle, CURLOPT_UPLOAD, 1L); // 設定上傳檔案大小
curl_easy_setopt(easy_handle, CURLOPT_INFILESIZE_LARGE, file_size);

5. libcurl 幾個重要函數

curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 2000);

curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);

curl_slist* headers = NULL;

headers = curl_slist_append(headers, "Content-Type: text/xml");

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

curl_httppost* post = NULL;

curl_httppost* last = NULL;
curl_formadd(&post, &last, CURLFORM_COPYNAME, "name", CURLFORM_COPYCONTENTS, "zheng", CURLFORM_END);

curl_formadd(&post, &last, CURLFORM_COPYNAME, "project", CURLFORM_COPYCONTENTS, "curl", CURLFORM_END);

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &process_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, NULL);

static size_t process_data(void* ptr, size_t size, size_t nmemb, void* param) {
  return size * nmemb;
}

curl_easy_setopt(easy_handle, CURLOPT_USERPWD, "user_name:password");

通過將CURLOPT_HTTPGET設為1可以使easy handle回到最原始的狀態

curl_easy_setopt(easy_handle, CURLOPT_HTTPGET, 1L);每個easy handle都會儲存最近使用的幾個串連,以備重用。預設是5個。可以通過CURLOPT_MAXCONNECTS屬性來設定儲存串連的數量。  如果你不想重用串連,將CURLOPT_FRESH_CONNECT屬性設定為1。這樣每次提交請求時,libcurl都會先關閉以前建立的串連,然後重新建立一個新的串連。也可以將CURLOPT_FORBID_REUSE設定為1,這樣每次執行完請求,串連就會馬上關閉

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.