我需要通过cURL从命令行发出一个POST请求。这个请求的数据位于一个文件中。我知道通过PUT可以用 --upload-file 选项来完成。
--upload-file
curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"
3 个评论
Muhammad Zeeshan :
检查我的答案。 stackoverflow.com/questions/6213509/send-json-post-using-php/...
breedish :
对不起,也许我错误地描述了我的问题,我需要的不是通过php-curl来发送请求,而是在linux操作系统上通过命令行发送curl命令。
Vadzim :
另见 使用curl命令行发送/邮寄xml文件 .
http
curl
http-post
command-line-interface
breedish 发布于 2011-06-20
6 个回答
Richard J 发布于 2019-12-24
已采纳
0 人赞同
你要找的是 --data-binary 的说法。 curl -i -X POST host:port/post-file \ -H "Content-Type: text/xml" \ --data-binary "@path/to/file" 在上面的例子中,-i打印出了所有的标题,这样你就可以看到发生了什么,而-X POST则明确指出这是一个帖子。 这两个都可以安全地省略,而不改变线上的行为。 文件的路径需要在前面加上@符号,所以curl知道要从一个文件中读取。
你要找的是 --data-binary 的说法。
--data-binary
curl -i -X POST host:port/post-file \ -H "Content-Type: text/xml" \ --data-binary "@path/to/file" 在上面的例子中,-i打印出了所有的标题,这样你就可以看到发生了什么,而-X POST则明确指出这是一个帖子。 这两个都可以安全地省略,而不改变线上的行为。 文件的路径需要在前面加上@符号,所以curl知道要从一个文件中读取。
在上面的例子中,-i打印出了所有的标题,这样你就可以看到发生了什么,而-X POST则明确指出这是一个帖子。 这两个都可以安全地省略,而不改变线上的行为。 文件的路径需要在前面加上@符号,所以curl知道要从一个文件中读取。
-i
-X POST
@
Ron Klein :
替换代码0】部分是非常重要的!
Anatoly Yakimchuk :
实际上,你可以只使用-d标志
Asclepius :
@Tol182 -d 会导致 curl 剥离新行,但 --data-binary 不会。
-d
Susanne Peng :
对于那些无法工作的人来说,请确保你在标题中指定了内容类型。
Cale Sweeney :
如果你从与你的数据文件相同的路径执行curl命令,它只是 --data-binary "@file" 。
--data-binary "@file"
Gray 发布于 2019-12-24
我需要通过Curl从命令行发出一个POST请求。这个请求的数据位于一个文件中... 你所需要做的就是让 --data 的参数以 @ 开始。 curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file-path 例如,如果你在一个名为stuff.xml的文件中拥有数据,那么你会做这样的事情。 curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file-path 替换代码3】的文件名可以用文件的相对路径或全路径替换。 @../xml/stuff.xml, @/var/tmp/stuff.xml, ...
我需要通过Curl从命令行发出一个POST请求。这个请求的数据位于一个文件中...
你所需要做的就是让 --data 的参数以 @ 开始。
--data
curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file-path 例如,如果你在一个名为stuff.xml的文件中拥有数据,那么你会做这样的事情。 curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file-path 替换代码3】的文件名可以用文件的相对路径或全路径替换。 @../xml/stuff.xml, @/var/tmp/stuff.xml, ...
例如,如果你在一个名为stuff.xml的文件中拥有数据,那么你会做这样的事情。
stuff.xml
curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file-path 替换代码3】的文件名可以用文件的相对路径或全路径替换。 @../xml/stuff.xml, @/var/tmp/stuff.xml, ...
替换代码3】的文件名可以用文件的相对路径或全路径替换。 @../xml/stuff.xml, @/var/tmp/stuff.xml, ...
@../xml/stuff.xml
@/var/tmp/stuff.xml
Hermann :
如果你需要发送一个命名的字段,你也可以使用 --data "name@stuff" 。
--data "name@stuff"
Leon Africa :
very slick solution! 100%
Lucas Liu 发布于 2019-12-24
如果你使用表单数据来上传文件,其中必须指定一个参数名称,你可以使用。 curl -X POST -i -F "parametername=@filename" -F "additional_parm=param2" host:port/xxx
如果你使用表单数据来上传文件,其中必须指定一个参数名称,你可以使用。
curl -X POST -i -F "parametername=@filename" -F "additional_parm=param2" host:port/xxx
Red Boy 发布于 2019-12-24
大多数答案都很完美,但当我为我的特殊问题来到这里时,我必须使用POST方法上传二进制文件(XLSX电子表格),我看到一件事 missing 也就是说,通常它不只是你加载的文件,你可能有更多的文件。 表格数据元素 , 如评论到文件或标签到文件 等等,就像我的情况一样。因此,我想把它添加到这里,因为这是我的用例,这样可以帮助其他人。 curl -POST -F comment=mycomment -F file_type=XLSX -F file_data=@/your/path/to/file.XLSX http://yourhost.example.com/api/example_url
大多数答案都很完美,但当我为我的特殊问题来到这里时,我必须使用POST方法上传二进制文件(XLSX电子表格),我看到一件事 missing 也就是说,通常它不只是你加载的文件,你可能有更多的文件。 表格数据元素 , 如评论到文件或标签到文件 等等,就像我的情况一样。因此,我想把它添加到这里,因为这是我的用例,这样可以帮助其他人。
curl -POST -F comment=mycomment -F file_type=XLSX -F file_data=@/your/path/to/file.XLSX http://yourhost.example.com/api/example_url
cyarbrough 发布于 2019-12-24
我在将文件作为参数传递时也遇到了类似的问题。使用-F允许文件作为表单数据被传递,但文件的内容类型是application/octet-stream。我的端点期望的是text/csv。 你能够用以下语法设置文件的MIME类型。 -F 'file=@path/to/file;type=<MIME_TYPE> 因此,对于一个CSV文件来说,完整的cURL命令看起来像这样。 curl -X POST -F 'file=@path/to/file.csv;type=text/csv' https://test.com 这里有关于这个和其他选项的良好文档。https://catonmat.net/cookbooks/curl/make-post-request#post-form-data
我在将文件作为参数传递时也遇到了类似的问题。使用-F允许文件作为表单数据被传递,但文件的内容类型是application/octet-stream。我的端点期望的是text/csv。
你能够用以下语法设置文件的MIME类型。
-F 'file=@path/to/file;type=<MIME_TYPE> 因此,对于一个CSV文件来说,完整的cURL命令看起来像这样。 curl -X POST -F 'file=@path/to/file.csv;type=text/csv' https://test.com 这里有关于这个和其他选项的良好文档。https://catonmat.net/cookbooks/curl/make-post-request#post-form-data
因此,对于一个CSV文件来说,完整的cURL命令看起来像这样。
curl -X POST -F 'file=@path/to/file.csv;type=text/csv' https://test.com 这里有关于这个和其他选项的良好文档。https://catonmat.net/cookbooks/curl/make-post-request#post-form-data
这里有关于这个和其他选项的良好文档。https://catonmat.net/cookbooks/curl/make-post-request#post-form-data
Jefferson Mendes 发布于 2019-12-24
我不得不使用HTTP连接,因为HTTPS上有默认的文件大小限制。