2012-08-16 98 views
3

我使用下面的代碼成功發送HTTP POST電話:的libcurl WriteCallback(異步) - C++

std::string curlString; 
CURL* pCurl = curl_easy_init(); 

if(!pCurl) 
    return NULL; 

string outgoingUrl = Url; 
string postFields = fields; 

curl_easy_setopt(pCurl, CURLOPT_TIMEOUT, 0); 

curl_easy_setopt(pCurl, CURLOPT_URL, outgoingUrl.c_str()); 
curl_easy_setopt(pCurl, CURLOPT_POST, 1); 

curl_easy_setopt(pCurl, CURLOPT_POSTFIELDS, postFields.c_str()); 
curl_easy_setopt(pCurl, CURLOPT_POSTFIELDSIZE, (long)postFields.size()); 

curl_easy_setopt(pCurl, CURLOPT_WRITEFUNCTION, CurlWriteCallback); 
curl_easy_setopt(pCurl, CURLOPT_WRITEDATA, &curlString); 

curl_easy_perform(pCurl); 

curl_easy_cleanup(pCurl); 

寫回調的原型如下:

size_t CurlWriteCallback(char* a_ptr, size_t a_size, size_t a_nmemb, void* a_userp); 

是否有辦法異步做到這一點?目前它在curl_easy_perform返回之前等待回調完成。此阻止方法不適用於擁有多個用戶的服務器。

+0

你來解決這個問題嗎?你可以添加你的解決方案的問題? – 2014-06-18 09:42:41

回答

4

libcurl easy文檔:

當所有的設置,你告訴libcurl中使用curl_easy_perform執行傳輸(3)。然後它將完成整個操作,直到完成(不成功)纔會返回。

libcurl multi interface文檔,作爲相對於「容易」的接口功能之一:

  1. 啓用在同一線程中的多個同時的傳送,而無需使其複雜的應用程序。

聽起來像你想要使用「多」的方法。

+2

在C++中使用多接口的示例可以在http://www.godpatterns.com/2011/09/asynchronous-non-blocking-curl-multi.html找到。 – 2014-02-22 01:43:23