私は現在、いくつかのデータをまとめて、ローカルWebサーバー(Apache 2.4.27)にPOSTリクエストをしています。HTTP 100のコンティニューコードを送受信した後にcURLがハングするのはなぜですか?
ここで私は一緒にリクエストを入れている方法は次のとおりです。
public function sendPost($url, array $data) {
$ch = curl_init($url);
$httpCodes = parse_ini_file(CONF::HTTP_CODES_INI);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 30);
curl_setopt($ch, CURLOPT_TIMEOUT , 30);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['data' => json_encode($data)]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
//Ignore SSL issues, testing on a dev box
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
$curlInfo = curl_getinfo($ch);
$httpCode = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
$curlInfo["http_code"] = $httpCode . ': ' . $httpCodes[$httpCode];
if ($result === false || $httpCode > 299) {
$result = json_encode($curlInfo);
}
curl_close($ch);
return $result;
}
これは私がしかしcURLの
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to my.local.server.com (127.0.0.1) port 80 (#0)
> POST /path/script.php?action=receive HTTP/1.1
Host: my.local.server.com
Accept: */*
Content-Length: 2645588
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------051580b0f5143de8
< HTTP/1.1 100 Continue
* Operation timed out after 30000 milliseconds with 0 bytes received
* Curl_http_done: called premature == 1
* Closing connection 0
から見た会話で、サーバー上でスクリプトのデバッグ中に、私は実際に入手できますかデータと要求はすべて行き来しているようです。私の理解から、HTTP 100 Continue
ステータスコード、cURLは最初にヘッダーを送信し、continue
の応答を参照して、データを送信する必要があります。
クライアントはHTTP/1.1 100 Continue
を受信したものの、タイムアウトすることがわかります。
タイムアウト時間を5分に設定しようとしましたが、タイムアウトまでハングアップします。
アイデア?
編集:I'vedがしようとすると設定されていないためにcontinue
期待を強制的に
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
を使用しようとしました。応答は同じで、ちょうどExpect: ...
の部分がありません。
"0 bytes ** received **"と表示され、おそらくそれが鍵です。それは非常にうまくすべてのバイトを送ったかもしれませんが、何も受け取っていません...(まあ、 "100続行"の後) –