当我将凭据作为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
答案 0 :(得分:1)
评论:网址中参数的顺序是至关重要的
还有另一个差异,param
为encoded
,因此=
变为%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
似乎服务器不支持post
和auth=
。
作为网址的一部分发送:
注意:使用
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