python requests.get使用auth =(user,pass)不工作

时间:2017-08-08 07:19:55

标签: python python-requests

当我将凭据作为URL的一部分发送时,我得到了正确的回复:

Springboot

但是当使用auth =(user,pass)尝试这样做时,它不起作用:

requests.get('<URL>?user=admin+pass=admin', params={"cmd": "getpower"})

response.code = 200
response.text ==> P61=0,P62=0,P63=1,P64=0,P65=1,P66=1,P67=1,P68=1

1 个答案:

答案 0 :(得分:1)

  

评论:网址中参数的顺序是至关重要的

还有另一个差异,paramencoded,因此=变为%3D

# '<URL>?user=admin+pass=admin'
url:http://httpbin.org/anything?user=admin+pass=admin&cmd=getpower

# requests.get(url, params=params
url:http://httpbin.org/anything?user=admin+pass%3Dadmin&cmd=getpower

# `dict` is **not** Ordered, it's possible to become reversed
url:http://httpbin.org/anything?cmd=getpower&user=admin+pass%3Dadmin

要解决此问题,请使用:

auth = {'user':'admin+pass=admin'}
params = {"cmd": "getpower"}
params.update(auth)
params_str = "&".join("%s=%s" % (k,v) for k,v in params.items())
r = requests.get(url, params=params_str)

结论:我认为无法克服作为网址的一部分传递。
假设服务器坏了? 阅读此相关SO post-request-failing-errno-10054

  

评论;:...尝试将用户+传递添加到params,无法正常工作

我忽略了您使用 Plus 而不是&amp; ,因此auth必须是:

auth = {'user': 'admin pass=admin'}

另请尝试:

r = requests.get(url, params=params, auth=('admin pass=admin', ''))
  

问题:使用auth =(user,pass)无效的requests.get

似乎服务器不支持postauth=

作为网址的一部分发送:

  

注意:使用get并作为网址的一部分是不安全的。

url = 'http://httpbin.org/anything'
auth = {'user': 'admin pass=admin'}
params = {"cmd": "getpower"}
params.update(auth)
r = requests.get(url, params=params)

使用Python测试:3.4.2