2012-08-16 17 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