2010-12-27 25 views
2

私は次の質問をしています:http応答で返されるデータをどのようにしてchar *バッファに書き込むことができますか?私はいくつかのアプローチを見つけました:curl_easy_performの後でデータを受信

  1. CURLOPT_WRITEDATAまたはCURLOPT_WRITEFUNCTIONを使用してください。 CURLOPT_WRITEDATAにはファイルポインタ(FILE *)が必要です。コールバック機能を持つCURLOPT_WRITEFUNCTIONの使用は私には奇抜であるようです...
  2. curl_easy_sendcurl_easy_recvを使用してください。しかしこの場合、私は手ですべてのPOSTヘッダーを書く必要があります...

他のより洗練されたアプローチがありますか?例えばchar *バッファポインタを関数に挿入してください。

答えて

2

実際には、CURLOPT_WRITEDATAとCURLOPT_WRITEFUNCTIONはどのポインタ型でも使用できます。あなたの関数がそのポインタ型と互換性がある限り。例えば

... 
    client_t *client; 
    CURL *conn; 
    ... 
    curl_easy_setopt(conn, CURLOPT_WRITEFUNCTION, read_data); 
    curl_easy_setopt(conn, CURLOPT_WRITEDATA, client); 
    ... 

static size_t read_data(void *ptr, 
         size_t size, 
         size_t nmemb, 
         client_t *client) 
{ 
    memcpy(client->data, ptr, size * nmemb); 
    return size * nmemb; 
} 
+0

ので...私は別のスレッドでそれをしなければなりませんか? – milo

+0

いい答えです、それはやるべきことです。ああ、ptrはcurl_easy_setoptで設定したオプションに応じて、全体の応答のチャンクにすぎないかもしれないことを忘れないでください。 – BROCK

+0

カールは、「私があなたに与えたバッファにどれくらいのデータを入れましたか」という情報を提供していないのはやや馬鹿です。 –

関連する問題