使用来自文件的发布数据向 cURL 发送请求
Posted
技术标签:
【中文标题】使用来自文件的发布数据向 cURL 发送请求【英文标题】:Send request to cURL with post data sourced from a file 【发布时间】:2011-09-18 12:43:38 【问题描述】:我需要从命令行通过 cURL 发出 POST 请求。此请求的数据位于文件中。我知道通过 PUT 可以使用 --upload-file
选项来完成。
curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"
【问题讨论】:
检查我的答案,***.com/questions/6213509/send-json-post-using-php/… 对不起,也许我错误地描述了我的问题,我需要发送请求,而不是通过 php-curl,而只是通过来自 linux os 命令行的 curl 命令。 另见send/post xml file using curl command line。 【参考方案1】:您正在寻找 --data-binary
参数:
curl -i -X POST host:port/post-file \
-H "Content-Type: text/xml" \
--data-binary "@path/to/file"
在上面的示例中,-i
打印出所有标题以便您查看发生了什么,-X POST
明确表明这是一个帖子。这两个都可以安全地省略而不改变电线上的行为。文件的路径需要以@
符号开头,因此curl
知道从文件中读取。
【讨论】:
@
部分非常重要!
其实你可以只使用 -d 标志
@Tol182 -d
将导致 curl
删除换行符,但 --data-binary
不会。
对于那些无法让它工作的人,请确保您在标题中指定了内容类型!
如果您从与数据文件相同的路径执行 curl 命令,则只需 --data-binary "@file"
。【参考方案2】:
我需要从命令行通过 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
stuff.xml
文件名可以替换为文件的相对路径或完整路径:@../xml/stuff.xml
、@/var/tmp/stuff.xml
、...
【讨论】:
如果需要发送命名字段,也可以使用--data "name@stuff"
。
非常巧妙的解决方案! 100%【参考方案3】:
如果您使用表单数据上传文件,其中必须指定参数名称,您可以使用:
curl -X POST -i -F "parametername=@filename" -F "additional_parm=param2" host:port/xxx
【讨论】:
【参考方案4】:这里的大多数答案都很完美,但是当我因特定问题登陆这里时,我必须使用 POST 方法上传二进制文件(XLSX 电子表格),我看到一件事缺少,即通常它不仅仅是你加载的文件,你可能有更多的表单数据元素,像对文件的评论或对文件的标签等,就像我的情况一样。因此,我想在这里添加它,因为它是我的用例,以便它可以帮助其他人。
curl -POST -F comment=mycomment -F file_type=XLSX -F file_data=@/your/path/to/file.XLSX http://yourhost.example.com/api/example_url
【讨论】:
【参考方案5】:我必须使用 HTTP 连接,因为在 HTTPS 上存在默认文件大小限制。
https://techcommunity.microsoft.com/t5/IIS-Support-Blog/Solution-for-Request-Entity-Too-Large-error/ba-p/501134
curl -i -X 'POST' -F 'file=@/home/testeincremental.xlsx' 'http://example.com/upload.aspx?user=example&password=example123&type=XLSX'
【讨论】:
以上是关于使用来自文件的发布数据向 cURL 发送请求的主要内容,如果未能解决你的问题,请参考以下文章