我有一个列表,我在其中为请求获取调用的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'))
答案 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
。