3

次のコード部分が POST 要求を正常に送信するが、$sendStream でデータを送信しない問題 (ストリームは有効で、データが含まれています - これは検証済みです):

curl_setopt($request, CURLOPT_HTTPHEADER, array('Content-type: application/x-rethync-request'));
curl_setopt($request, CURLOPT_HEADER, true);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_INFILE, $sendStream);
curl_setopt($request, CURLOPT_INFILESIZE, stream_length($sendStream));
curl_setopt($request, CURLOPT_CUSTOMREQUEST, "POST");

$response = curl_exec($request);

私はおそらくすべての cURL POST 関連の投稿を SO で読んだことがありますが、運はありません。データが掲載されていないのはなぜですか?

4

1 に答える 1

10

欠けていたピースは

    curl_setopt($request, CURLOPT_UPLOAD, 1);

PHP のドキュメントでは、このオプションについて簡単に説明していますが、オプションを設定する必要があることを示唆するものは何もありません。CURLOPT_UPLOAD も設定されていない限り、CURLOPT_INFILE で指定されているにもかかわらず、cURL の少なくとも一部 (すべてではないにしても) のバージョンはデータを送信しません。

注: このメソッドを使用してデータを送信する場合、応答ヘッダーにはHTTP/1.1 100 Continue最初に含まれ、その後に続きHTTP/1.1 200 OKます。したがって、応答ヘッダーを解析するときは、最初の 100 の Continue 応答に注意してください (それを削除する必要があります)。

于 2013-02-17T11:13:28.423 に答える