自定义二进制数据的cURL POST(不是表单内容)

时间:2013-02-17 11:13:28

标签: php post curl http-post

以下代码片成功发送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);

我已经在SO上阅读了所有与cURL POST相关的帖子,但没有运气。为什么没有发布数据?

1 个答案:

答案 0 :(得分:10)

缺少的部分是

    curl_setopt($request, CURLOPT_UPLOAD, 1);

PHP文档简要提到了这个选项,没有任何暗示应该设置该选项。尽管还设置了CURLOPT_UPLOAD,但至少有一些(如果不是全部)版本的cURL不会发布数据,尽管它是通过CURLOPT_INFILE指定的。

注意:使用此方法发送数据时,响应标头首先包含HTTP/1.1 100 Continue,然后是HTTP/1.1 200 OK,依此类推。因此,当您解析响应头时,请注意前100个“继续”响应(您需要将其删除)。