GWも出社して動作確認の手使いと、今月末リリース予定の実装を進め中。
山手線も会社の食堂もガラガラでした。
curl-7.13以降では1024バイト以上のデータを送信する場合に「Expect: 100-continue」ヘッダを自動で付与するらしい。
パケットを取ったりログを仕込んで、やっと問題点の原因が分かった。
HTTP/1.1からBODYが大きい場合などに、先にヘッダだけ送りサーバの返事を待てるようになった。
その際に、サーバの返事が「4xx系なら中止」「100 系なら送信」のように振る舞える。
ただ「100-continue」に対応してないサーバ(HTTP接続な認証サーバとか)も存在する。
その場合、次のようなコードを追加することで問題を回避できる。
1 2 3 4 5 6 7 8 9 |
struct curl_slist *headers = curl_slist_append(headers, "Expect:"); CURLcode curl_err = curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, headers); ...処理.... if (headers) { curl_slist_free_all(headers); headers = NULL; } |
原因解明に1日かかった・・・。
もっと大きな問題が、あと3つ・・・ある。