C++ アプリケーションでヘッダー付きの cURL 投稿を作成しました。
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &bufferdata);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writerResponse);
struct curl_slist *headers=NULL;
char outputmessage[]="";
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers );
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cJSONstring.c_str());
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, cJSONstring.length());
curl_easy_setopt(curl, CURLOPT_VERBOSE,1);
curl_easy_setopt(curl, CURLOPT_HEADER,1);
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
curl_multi_add_handle(m_telemetryCurlm, curl);
multi perform を呼び出すスレッドを作成しました。
void ContentManager::processTelemetry()
{
m_telemetryThreadRunning = true;
while(m_telemetryThreadRunning)
{
static_cast<ADCAnalytics*>(m_adcAnalytics)->performTelemerty();
usleep(5000);
}
}
void ADCAnalytics::performTelemerty()
{
// number of active downloads
int counter = 0;
// preform downloading
curl_multi_perform(m_telemetryCurlm, &counter);
// handle CURL actions (connection errors, download finish, etc.)
checkCURLMessages();
}
しかし、カールメッセージを確認すると、次のようになります。
12-10 13:23:00.845: I/ADC (17248): バッファ = HTTP/1.1 400 不正な要求
12-10 13:23:00.845: I/ADC (17248): X-TraceUrl: /appstats/details?time=1355145806563&type=json
12-10 13:23:00.845: I/ADC(17248): コンテンツ タイプ: テキスト/プレーン
12-10 13:23:00.845: I/ADC(17248): 変化: Accept-Encoding
12-10 13:23:00.845: I/ADC(17248): 日付: 2012 年 12 月 10 日月曜日 13:23:26 GMT
12-10 13:23:00.845: I/ADC(17248): サーバー: Google フロントエンド
12-10 13:23:00.845: I/ADC (17248): キャッシュ制御: プライベート
12-10 13:23:00.845: I/ADC(17248): 転送エンコード: チャンク
curl_multi_add_handle と curl_multi_perform で content-type が変わっているようです。ここで何が間違っているのか誰にもわかりませんか?content-type が変更されないようにするにはどうすればよいですか?
以下のコードを追加する場合
do {
while(curl_multi_perform(m_telemetryCurlm, &still_running) ==CURLM_CALL_MULTI_PERFORM);
} while (still_running);
cURL オブジェクトを設定した直後。リクエストがサーバーに送信され、取得します
12-10 13:11:48.105: I/ADC(16845): バッファ = HTTP/1.1 200 OK
12-10 13:11:48.105: I/ADC (16845): X-TraceUrl: /appstats/details?time=1355145133776&type=json
12-10 13:11:48.105: I/ADC (16845): コンテンツ タイプ: アプリケーション/json
12-10 13:11:48.105: I/ADC(16845): 変化: Accept-Encoding
12-10 13:11:48.105: I/ADC(16845): 日付: 2012 年 12 月 10 日月曜日 13:12:13 GMT
12-10 13:11:48.105: I/ADC(16845): サーバー: Google フロントエンド
12-10 13:11:48.105: I/ADC(16845): キャッシュ制御: プライベート
12-10 13:11:48.105: I/ADC(16845): Transfer-Encoding: chunked
だから、サーバー側で何か問題があるとは思わない。
ありがとう