Python请求调用不按预期处理身份验证

时间:2017-02-03 19:18:40

标签: python python-requests

我有一个列表,我在其中为请求获取调用的url和身份验证参数。如果我以这种方式尝试调用,我会收到身份验证错误(401),但如果我在调用时明确地突破auth自身工作。为什么我不能以这种方式包含auth并期望它在通话中正确“爆炸”?

parms = []
parms.append(url)
parms.append('auth=(''UID'', ''PWD'')')
response = requests.get(*parms) 

这导致404因为它无法识别身份验证。但是,如果我这样做,它的确有效。对我来说,这些似乎是一样的。单引号只是不同,以使字符串正确附加到列表中。我认为第一种方式会产生2个参数 - url和auth

parms = []
parms.append(url)
response = requests.get(*parms, auth=('UID', 'PWD')) 

1 个答案:

答案 0 :(得分:2)

第一个等同于以下内容:

requests.get(url, "auth=('UID', 'PWD')")

当你真正想要的时候:

requests.get(url, auth=('UID', 'PWD'))

你必须改用:

args = []
kwargs = {}

args.append(url)
kwargs['auth'] = ('UID', 'PWD')

requests.get(*args, **kwargs)

规则是:

  • 当您function(foo, bar)使用位置参数时,它们会进入*args
  • 当您function(foo=1, bar=2)使用命名参数时,它们会进入**kwargs
  • 你可以混合两者,在Python 2中,位置参数必须放在命名参数之前。