如何在带有多个参数的bash curl命令中使用--data二进制

如何在带有多个参数的bash curl命令中使用--data二进制,bash,curl,Bash,Curl,但反应结果仍然不正确 curl -i -X POST -H "Content-Type: multipart/form-data" -H "Content-Type: application/x-www-form-urlencoded" --data-binary 'filename=@/root/test.txt' --data-binary 'jsondata={"fileName":"test","id":"xxx","backlink":"https://example.com/h

但反应结果仍然不正确

curl -i -X POST -H "Content-Type: multipart/form-data" -H "Content-Type: application/x-www-form-urlencoded" --data-binary  'filename=@/root/test.txt' --data-binary   'jsondata={"fileName":"test","id":"xxx","backlink":"https://example.com/hello"}' https://example.com/convert2PDF
有人能帮忙吗?这是我的秘密炮弹对吗

如果我使用以下命令[replace-data binary to-F],我将获得正确的状态,但是从php代码中我知道我应该在bash curl中添加CURLOPT_binarytranse,否则将无法获得正确的post数据

HTTP/1.1 200 OK
Date: Fri, 01 Jun 2018 14:41:37 GMT
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
Server: Jetty(9.4.5.v20170502)

error
我想得到响应的状态是200,结果是在--data二进制模式下成功,我能做些什么来udpate我的bash命令

数据二进制的关键在于它是一大块字节。您只能发送一个,因为每个HTTP请求只有一个正文,并且只能有一个顶级内容类型

您试图做的似乎是构造一个由多个部分组成的请求主体,它有两部分,一部分包含文件数据,另一部分包含键/值对

要通过命令行发送包含一些元数据的文件,可以执行以下操作:

curl -i -X POST -H "Content-Type: multipart/form-data" -H "Content-Type: application/x-www-form-urlencoded" -F  'filename=@/root/test.txt' -F   'jsondata={"fileName":"test","id":"xxx","backlink":"https://example.com/hello"}' https://example.com/convert2PDF

HTTP/1.1 100 Continue

HTTP/1.1 200 OK
Date: Fri, 01 Jun 2018 16:29:35 GMT
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
Server: Jetty(9.4.5.v20170502)

success
这将发送一个由多个部分组成的请求,其中PHP后端可以访问来自$\u POST的元数据和来自$\u文件的文件数据

所需的确切方法将取决于后端希望接收的内容,但您尚未发布该内容

例如,以下内容将使用--data binary(根据您的问题),但是参数和文件数据都将在后端以不同的方式访问

curl -F'id=xxx' -F 'name=foo' -F'file=@test.txt;type=text/plain' http://example.com

“你认为你能把你得到的和你期望的加起来吗?”杰森更新描述。如果您方便,请给出一些建议,非常感谢。顶部的代码是否阻止text.txt的内容?@json,是的,变量$uploadPath是text.txt的路径
curl -F'id=xxx' -F 'name=foo' -F'file=@test.txt;type=text/plain' http://example.com
curl --data-binary '@test.txt' 'http://example.com?id=xxx&name=foo'