5

次のコードを使用して、http POST 呼び出しを正常に実行しています。

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 が戻る前に、コールバックが終了するのを待ちます。このブロック方法は、多くのユーザーがいるサーバーでは機能しません。

4

1 に答える 1

5

libcurlの簡単なドキュメントから:

すべてのセットアップが完了したら、curl_easy_perform(3)を使用して転送を実行するようにlibcurlに指示します。その後、操作全体を実行し、完了するまで(成功するかどうかにかかわらず)戻りません。

libcurlマルチインターフェースのドキュメントから、「簡単な」インターフェースとは対照的な機能の1つ:

  1. アプリケーションを複雑にすることなく、同じスレッドで複数の同時転送を有効にします。

「マルチ」アプローチを使用したいようです。

于 2012-08-16T03:42:47.110 に答える