我需要在各种情况下测试我的 http 服务器响应,即使身份验证失败。如果身份验证失败,我的服务器会返回401 Unauthorized
一个简单包含的响应正文Unauthorized
(或者可能是其他一些详细消息)。
使用例如curl
或httpie
,我得到了响应的响应正文401
。
$ curl http://10.5.1.1/bla
Unauthorized
$ curl http://10.5.1.1/bla --digest --user joe:wrong
Unauthorized
$ http http://10.5.1.1/bla -b
Unauthorized
$ http http://10.5.1.1/bla -b --auth-type digest --auth joe:wrong
Unauthorized
但是当使用 wget 尝试此操作时,我没有得到任何输出:
$ wget http://10.5.1.1/bla -q -O /dev/stdout
$ wget http://10.5.1.1/bla -q -O /dev/stdout --user joe --password wrong
在本例中,wget 返回退出代码 6,但我需要检查响应消息。
以下是使用 httpie 捕获的完整流量转储:
$ http http://10.5.1.1/bla --print hbHB
GET /bla HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: 10.5.1.1
User-Agent: HTTPie/0.9.2
HTTP/1.1 401 Unauthorized
Connection: keep-alive
Content-Length: 13
Content-Type: text/plain
Date: 2017-08-27 23:01:07
Server: Vistra-I St10 SW218 HW010
WWW-Authenticate: Digest realm="Vistra-I", qop="auth", nonce="a0c5d461f2b74b2b797b62f54200d125", opaque="0123456789abcdef0123456789abcdef"
Unauthorized
(请注意,Unauthorized
响应正文中的消息以换行符结尾,这就是 Content-Length: 13 的原因)
同样的事情,如果服务器响应403
或404
等等。知道如何wget
在这种情况下使用响应正文吗?
编辑2017-09-22
--content-on-error
在我的 wget 1.17.1 中找到了选项(另请参阅wget手册)。
这适用于例如响应代码的情况,404
但不适用于401
或5xx
代码。
供401
参阅这个错误。
答案1
使用以下命令,404
在出现503
错误时我能够获得服务器响应:wget 1.20.1
wget --no-verbose --save-headers --content-on-error=on --timeout=3 --tries=1 -O- http://127.0.0.1:8080/bla
输出示例:
HTTP/1.1 404 Not Found
X-Endpoint-Path: GET /bla
X-Sub-Calls-Count: 0
X-Mdc: XNIO-1 task-11550846786294
X-Child-Calls-Count: 0
X-Hop: 1
Date: Fri, 22 Feb 2019 14:46:26 GMT
Connection: keep-alive
Transfer-Encoding: chunked
Content-Type: application/json;charset=UTF-8
{"id":"266a8c43-81ae-4b73-bb0c-d3e0a37a11c4","createdAt":1550846786327,"httpCode":404,"code":"RESOURCE_NOT_FOUND","message":"RESTEASY003210: Could not find resource for full path: http://127.0.0.1:8080/bla"}http://127.0.0.1:8080/bla:
2019-02-22 15:46:26 ERROR 404: Not Found.
答案2
可以使用以下wget
选项检索响应标头
wget --server-response http://10.5.1.1/bla
我不知道有任何 optino 可以让您在发生错误时检索响应正文wget
如果您想要使用另一个命令的响应正文,请curl
按原样使用:
curl http://10.5.1.1/bla
答案3
就我而言,对于“403 Forbidden”,我必须--content-on-error
像其他答案所说的那样使用,但由于某种原因,如果我也使用-q
.所以诀窍是同时使用两者:
wget -q --content-on-error -O- http://...