如何使用GNU wget发送PUT请求并获取完整响应体?
如何使用GNU wget发送PUT请求并获取完整响应体?
嘿,我之前也碰到过一模一样的问题!其实用wget发送PUT请求并拿到完整响应体,核心是把几个参数搭配对,我来给你捋清楚:
首先直接给你能拿到完整响应(响应体+可选响应头)的可行命令:
wget --method=PUT --header="Content-Type: application/json" --body-file=tmpfile.txt -O - --verbose "https://api.example.com/api/v1/path"
我拆解下每个参数的作用,以及为什么你之前的命令没拿到响应体:
--method=PUT:这个你已经用对了,指定HTTP请求方法为PUT--header="Content-Type: application/json":告诉服务器请求体是JSON格式,没问题--body-file=tmpfile.txt:从指定文件读取PUT请求的内容,正确-O -:这是核心! 大写的-O参数指定响应体的输出位置,这里的-代表标准输出(也就是你的终端),这样响应体就会直接打印出来。你之前用这个参数却没拿到内容,大概率是因为缺少调试参数,或者服务器返回错误状态码时wget默认不输出响应体--verbose(简写-v):这个参数会把请求头、响应头、状态码这些细节都打印出来,方便调试;如果只想要响应体,可以去掉这个参数
另外,如果服务器返回4xx/5xx这类错误状态码,wget默认会跳过响应体的输出,这时候你需要加上--content-on-error参数,强制获取错误响应的内容:
wget --method=PUT --header="Content-Type: application/json" --body-file=tmpfile.txt -O - --content-on-error "https://api.example.com/api/v1/path"
最后再总结下关键点:
- 必须用
-O指定响应体的输出位置(-是输出到终端,也可以写文件名保存到本地) - 要同时查看响应头就加
-v - 错误状态码下要拿响应体就加
--content-on-error
虽然确实curl做这类HTTP请求更顺手,但既然只能用wget,这个组合应该能解决你的问题~
备注:内容来源于stack exchange,提问作者hed wig
相关产品推荐
相关产品推荐

