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

Php 自定义二进制数据的cURL POST(非表单内容),php,post,curl,http-post,Php,Post,Curl,Http Post,以下代码段成功发送POST请求,但未发送$sendStream中的数据(流有效且包含数据-已验证): 我可能已经阅读了所有与cURL POST相关的文章,但没有运气。为什么数据没有发布?丢失的部分被删除了 curl_setopt($request, CURLOPT_UPLOAD, 1); PHP文档简要地提到了这个选项,但没有任何东西表明应该设置这个选项。尽管通过CURLOPT_infle指定了数据,但至少有一些(如果不是全部)版本的cURL不会发布数据,除非还设置了CURLOPT_U

以下代码段成功发送POST请求,但未发送$sendStream中的数据(流有效且包含数据-已验证):

我可能已经阅读了所有与cURL POST相关的文章,但没有运气。为什么数据没有发布?

丢失的部分被删除了

    curl_setopt($request, CURLOPT_UPLOAD, 1);
PHP文档简要地提到了这个选项,但没有任何东西表明应该设置这个选项。尽管通过CURLOPT_infle指定了数据,但至少有一些(如果不是全部)版本的cURL不会发布数据,除非还设置了CURLOPT_UPLOAD


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

谢谢-这也是我一直在寻找的缺失片段。值得一提的是,您可以将字符串作为流发送。使用PHP,只需几行代码即可完成<代码>$someString='String content'$stream=fopen('php://memory","r+",;fwrite($stream,$someString)$dataLength=ftell($stream);倒带($stream)然后添加前面提到的行,就可以发送二进制数据了
CURLOPT_infle=>$stream CURLOPT_inflesize=>$dataLength CURLOPT_UPLOAD=>1
@WojciechJakubas我不确定我是否理解了评论的要点。是的,您可以从内存流发送数据,但是问题不同——缺少参数导致cURL不发送任何内容。数据的来源可能不是问题的根源。
    curl_setopt($request, CURLOPT_UPLOAD, 1);