python-requests自动添加http标头

时间:2017-01-31 17:12:14

标签: 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(self):
   headers=self.headers
   headers['bla']='bla'
   r=requests.post(url + "/test1",headers=headers)

出于某种原因,当我按此顺序执行这些功能时:

   req1()
   req2()

'Content-Type'标头也会在req2()中发送。

当我以相反的顺序执行这些功能时:

   req2()
   req1()

'Content-Type'标头仅在req1()中发送。

这可能是什么原因发生的?也许请求会在不询问的情况下添加Content-Type标题?

现在我正在解决这个问题:

def req2():
   headers=self.headers
   headers['bla']='bla'
   del headers['Content-Type']
   r=requests.post(url + "/test1",headers=headers)

我正在寻找更好的解决方案。有人可以解释发生了什么吗?

1 个答案:

答案 0 :(得分:4)

当您将headers分配给self.headers您实际上并未复制字典时,您只是创建另一个参考。然后,当您更新headers时,self.headers会更新,因为它们都指向同一个对象。

如果您需要实际复制字典,有不同的方法,请参阅: