python请求自动添加http头
出于某种原因,当我按以下顺序执行这些函数时:python请求自动添加http头,python,python-requests,Python,Python Requests,出于某种原因,当我按以下顺序执行这些函数时: def __init__(self): self.headers={'Accept':'application/json'} def req1(self): headers=self.headers headers['bla']='bla' headers['Content-Type']='application/json' r=requests.post(url,headers=headers) def req2(
def __init__(self):
self.headers={'Accept':'application/json'}
def req1(self):
headers=self.headers
headers['bla']='bla'
headers['Content-Type']='application/json'
r=requests.post(url,headers=headers)
def req2(self):
headers=self.headers
headers['bla']='bla'
r=requests.post(url + "/test1",headers=headers)
“内容类型”标题也在req2()
中发送
当我以相反的顺序执行这些功能时:
req1()
req2()
“内容类型”标题仅在req1()
中发送
发生这种情况的原因可能是什么?也许请求会在没有询问的情况下添加内容类型标题
目前,我正在这样解决问题:
req2()
req1()
我在寻找更好的解决办法。有人能解释一下发生了什么吗?当您将标题分配给self.headers
时,您实际上不是在复制词典,而是在创建另一个引用。然后,当您更新标题
时,self.headers
将被更新,因为两者都指向同一个确切的对象
如果您需要实际复制词典,有不同的方法,请参阅:
当您将标题
分配给self.headers
时,实际上并不是在复制字典,而是在创建另一个引用。然后,当您更新标题
时,self.headers
将被更新,因为两者都指向同一个确切的对象
如果您需要实际复制词典,有不同的方法,请参阅:
def req2():
headers=self.headers
headers['bla']='bla'
del headers['Content-Type']
r=requests.post(url + "/test1",headers=headers)