私は2つのHTTPレスポンスを比較するために何とかしなければならない宿題があります。私はC言語で書いています。私はlibcurlを使って簡単にします。私は、libcurlを使用して別の関数からHTTPリクエストとレスポンスを呼び出す関数を呼び出しており、HTTPレスポンスをchar *
として返したいとします。ここに私のコードは、(それがクラッシュした)これまでです:Cでは、libcurlを使用してHTTPレスポンスを文字列に読み込む方法はありますか?
#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
char *handle_url(void) {
CURL *curl;
char *fp;
CURLcode res;
char *url = "http://www.yahoo.com";
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
curl_easy_cleanup(curl);
//printf("\n%s", fp);
}
return fp;
}
私はちょうど呼び出し元の関数に文字列を返すようにしたいので、私の場合には動作しますが、ないC libcurl get output into a stringこのソリューションは。
アイデア?
'char * fp;'とは何ですか?なぜあなたはそれを返すのですか?どのように/あなたはそれのためのメモリを割り当てていますか?私の眼鏡はどこですか? –
。私はCを書く年を持っていたので、私はゼロに戻っています。それは、 "C libcurlの文字列への出力を取得する"で動作していることです。上記の例を参考にしています。私は正確なデータ入力がわからないので、char * fpのためにメモリを割り当てるのがうまくいくかどうかわかりません。 –
あなたの 'write_data'は' char * fp'をパラメータとして渡すべきですが、 'FILE'を取るように定義しました。また、 'write_func'が複数回呼び出されるケースを処理する必要があるでしょう。最後に、期待通りに動作させたい場合、 'char * fp'はポインタへのポインタとして' write_func() 'に渡されなければならないので、適切に割り当てることができます。言い換えれば、 'write_func()'は 'FILE * 'ではなく' char ** 'を取るべきです。 – mpontillo