10

HTTPリクエストから返されたデータを変数に保存しようとしています。

以下のコードは、リクエストの応答を自動的に出力しますが、文字または文字列への応答を保存するために必要です。

int main(void)
{
        char * result;
        CURL *curl;
        CURLcode res;
        curl = curl_easy_init();
        if(curl) {
            curl_easy_setopt(curl, CURLOPT_URL, "http://www.browsarity.com/");

            res = curl_easy_perform(curl);
            curl_easy_cleanup(curl);
        }
        return 0;
 }
4

3 に答える 3

18

を介して書き込みコールバックとして渡す関数を作成する必要があると思いますCURLOPT_WRITEFUNCTIONこれを参照)。または、一時ファイルを作成し、そのファイル記述子をCURLOPT_WRITEDATA(そのページにリストされている次のオプション)を介して渡すこともできます。次に、一時ファイルから文字列にデータを読み戻します。最も美しいソリューションではありませんが、少なくともバッファや関数ポインタをいじる必要はありません。

編集:あなたはファイルに書きたくないので、このようなものがうまくいくかもしれません:

#include <string>

size_t write_to_string(void *ptr, size_t size, size_t count, void *stream) {
  ((string*)stream)->append((char*)ptr, 0, size*count);
  return size*count;
}

int main(void) {
  // ...
  if (curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.browsarity.com/");

    string response;
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_to_string);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);

    // The "response" variable should now contain the contents of the HTTP response
  }
  return 0;
}

免責事項:私はこれをテストしていません。C++では少し錆びていますが、試してみることができます。

于 2010-03-04T04:35:48.477 に答える
2

これがあなたのための例ですhttp://code.google.com/p/aws4c/source/browse/trunk/aws4c.c#637

T.Yatesは正しいです、あなたはデータを受け取る関数を作らなければなりません。そして、CURLOPT_WRITEFUNCTIONを使用して関数についてCURLに通知します。

于 2010-03-04T04:57:21.237 に答える
0

コードをより理解しやすくするために、次のwrite_to_stringような関数を使用します。

size_t write_to_string(void *ptr, size_t size, size_t nmemb, std::string stream)
{
  size_t realsize = size * nmemb;
  std::string temp(static_cast<const char*>(ptr), realsize);
  stream.append(temp);
  return realsize;
}
于 2012-10-18T11:44:37.520 に答える