如何使用 wget 获取 401 情况下的 http 服务器响应?

如何使用 wget 获取 401 情况下的 http 服务器响应?

我需要在各种情况下测试我的 http 服务器响应,即使身份验证失败。如果身份验证失败,我的服务器会返回401 Unauthorized一个简单包含的响应正文Unauthorized(或者可能是其他一些详细消息)。

使用例如curlhttpie,我得到了响应的响应正文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 的原因)

同样的事情,如果服务器响应403404等等。知道如何wget在这种情况下使用响应正文吗?

编辑2017-09-22

--content-on-error在我的 wget 1.17.1 中找到了选项(另请参阅wget手册)。

这适用于例如响应代码的情况,404但不适用于4015xx代码。

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://...

相关内容