10

libcurl を使用して API コマンドをローカル サービス (つまり 127.0.0.1) に送信しています。

このプログラムは、(プログラムを使用する) シェル スクリプトを置き換えることを目的としていcurlます。

curl_easy_perform()どこかで 1 秒の遅延があることを除いて、すべてが機能しています。つまり、呼び出してから最初に読み取りコールバック関数が呼び出されるまでに 1 秒が経過します。

C プログラムは次のオプションを使用しています (エラー チェックとコールバック コードは省略されています)。

curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:12345/x");
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
curl_easy_setopt(curl, CURLOPT_INFILESIZE, (long)getLengthOfCommandObject());
curl_easy_setopt(curl, CURLOPT_READFUNCTION, &myReadFunction);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &myWriteFunction);

しかし、次curlのようにシェルから実行すると:

$ curl --data-binary '<command>' http://127.0.0.1:12345/x

1 秒の遅延に苦しむことなく、すぐに要求を送信します。

遅延の原因は何ですか?また、それを防ぐために設定できるオプションはありますか?


編集サーバーはマングースに基づいています

4

3 に答える 3

18

遅延の理由は次のとおりです。

クライアント側の解決策は、次のExpectようにヘッダーを無効にすることです。

headers = curl_slist_append(NULL, "Expect:");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// ...
result = curl_easy_perform(curl);
curl_slist_free_all(headers);

PHP クライアント関連する PHP の質問に対する同等の修正

于 2013-06-30T13:21:35.923 に答える