python请求等同于'wget --auth-no-challenge'是什么?

时间:2018-07-06 07:36:58

标签: python http python-requests wget basic-authentication

使用以下wget命令,我可以从希望连接的RESTful接口进行身份验证并获取所需的JSON响应:

wget --auth-no-challenge \
  http://myusername:mypasswd@example.com:8090/some/endpoint

问题是当我使用Python 3.6中的请求包进行连接时:

import requests
from requests.auth import HTTPBasicAuth

r = requests.get('http://example.com:8090/some/endpoint', \ 
                 auth=HTTPBasicAuth('myusername', 'mypasswd'))

我无法通过身份验证,并获取指示失败的JSON。尝试使用firefox或我的Python脚本进行连接时,使用wireshark跟踪数据包,可以看到未发送授权,并且使用firefox进行连接时,弹出以下对话框:

You are about to log into the site example.com with the username
"myusername" but the website does not require authentication.  Do 
you wish to continue?

问题似乎与here中描述的情况类似,其中Jenkins服务器未发送401错误,因此无法重试身份验证。还尝试了类似here但没有运气的事情。

那么,有人知道如何使用--auth-no-challenge从wget转换为python3的请求吗?使用urllib的较低级别的内容也可以做到这一点。

编辑:我可以确认以下身份验证并正确返回JSON:

from http.client import HTTPConnection
from base64 import b64encode

c = HTTPConnection("example.com:8090")

headers = { 'Authorization' : 'Basic %s' %  userAndPass }
userAndPass = b64encode(b"myusername:mypasswd").decode("ascii")

c.request('GET', '/some/endpoint', headers=headers)

res = c.getresponse()
data = res.read() 

因此,使用requests模块将其翻译为某些内容也可以完成这项工作。

0 个答案:

没有答案