Set new cookie between requests with Python Requests

匿名 (未验证) 提交于 2019-12-03 09:13:36

问题:

I'm doing this right now, but it fails at that last line with TypeError: expected string or buffer.

import requests from urllib.parse import urlparse  url = 'some url'  s = requests.Session() s.headers.update({     'Origin':urlparse(url).netloc,     'Referer':url })   r = s.get(url)  s.cookies['cookie1'] = 25 s.cookies['cookie2'] = 25  r = s.post(     url,     {'param':'value1', 'param2':'value2'},     headers={'X-Requested-With':'XMLHttpRequest'} ) 

What's the correct way to update the cookies when using Session? I'm pretty new to Python, so I might have confused something. Using Python 3.4.1.

Traceback:

Traceback (most recent call last):   File "file.py", line 37, in <module>     {'param':'value1', 'param2':'value2'}   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/sessions.py", line 498, in post     return self.request('POST', url, data=data, **kwargs)   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/sessions.py", line 422, in request     prep = self.prepare_request(req)   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/sessions.py", line 360, in prepare_request     hooks=merge_hooks(request.hooks, self.hooks),   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/models.py", line 296, in prepare     self.prepare_cookies(cookies)   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/models.py", line 491, in prepare_cookies     cookie_header = get_cookie_header(self._cookies, self)   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/cookies.py", line 134, in get_cookie_header     jar.add_cookie_header(r)   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/http/cookiejar.py", line 1329, in add_cookie_header     attrs = self._cookie_attrs(cookies)   File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/http/cookiejar.py", line 1288, in _cookie_attrs     self.non_word_re.search(cookie.value) and version > 0): TypeError: expected string or buffer 

回答1:

Cookie values are strings, not integers. Set them as such:

s.cookies['cookie1'] = '25' s.cookies['cookie2'] = '25' 

Demo:

>>> import requests >>> from urllib.parse import urlparse >>> url = 'http://httpbin.org/cookies' >>> s = requests.Session() >>> s.headers.update({ ...     'Origin':urlparse(url).netloc, ...     'Referer':url ... }) >>> r = s.get(url) >>> s.cookies['cookie1'] = '25' >>> s.cookies['cookie2'] = '25' >>> r = s.get(url, headers={'X-Requested-With':'XMLHttpRequest'}) >>> print(r.text) {"cookies": {"cookie1": "25", "cookie2": "25"}} 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!