【发布时间】:2014-10-19 11:14:39
【问题描述】:
我现在正在这样做,但在最后一行以 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'}
)
使用Session 时更新 cookie 的正确方法是什么?我对 Python 很陌生,所以我可能会混淆一些东西。使用 Python 3.4.1。
追溯:
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
【问题讨论】:
-
cookies['cookie1'] = '25'等...(我想您的示例可能是r.cookies.update(cookie1='25', cookie2='25')- 因为您正在有效地更新请求对象本身的 cookie(除非您的意思是cookies = r.cookies.copy()。它会有所帮助如果您包含完整的回溯... -
稍微更改了代码并在问题中添加了回溯。
标签: python session cookies python-requests