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

Eug*_*its 3 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);
Run Code Online (Sandbox Code Playgroud)

我在这里阅读了所有与cURL POST相关的帖子,但没有运气.为什么没有发布数据?

Eug*_*its 10

缺少的是

    curl_setopt($request, CURLOPT_UPLOAD, 1);
Run Code Online (Sandbox Code Playgroud)

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

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