使用 Python 请求在请求之间设置新 cookie [英] Set new cookie between requests with Python Requests
本文介绍了使用 Python 请求在请求之间设置新 cookie的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我现在正在这样做,但它在最后一行失败,并显示 TypeError: expected string or buffer
.
导入请求从 urllib.parse 导入 urlparseurl = '一些网址's = requests.Session()s.headers.update({'Origin':urlparse(url).netloc,推荐人":网址})r = s.get(url)s.cookies['cookie1'] = 25s.cookies['cookie2'] = 25r = s.post(网址,{'param':'value1', 'param2':'value2'},headers={'X-Requested-With':'XMLHttpRequest'})
使用 Session
时更新 cookie 的正确方法是什么?我对 Python 很陌生,所以我可能会混淆一些东西.使用 Python 3.4.1.
追溯:
回溯(最近一次调用最后一次):文件file.py",第 37 行,在 <module> 中{'param':'value1', 'param2':'value2'}文件/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/sessions.py",第 498 行,在帖子中return self.request('POST', url, data=data, **kwargs)文件/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/sessions.py",第 422 行,请求prep = self.prepare_request(req)文件/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/sessions.py",第360行,在prepare_request中hooks=merge_hooks(request.hooks, self.hooks),文件/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/models.py",第296行,准备self.prepare_cookies(cookies)文件/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/models.py",第491行,在prepare_cookiescookie_header = get_cookie_header(self._cookies, self)文件/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/cookies.py",第 134 行,在 get_cookie_headerjar.add_cookie_header(r)文件/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/http/cookiejar.py",第 1329 行,在 add_cookie_headerattrs = self._cookie_attrs(cookies)文件/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/http/cookiejar.py",第 1288 行,在 _cookie_attrsself.non_word_re.search(cookie.value) 和版本 >0):类型错误:预期的字符串或缓冲区
解决方案
Cookie 值是字符串,而不是整数.将它们设置为:
s.cookies['cookie1'] = '25's.cookies['cookie2'] = '25'
演示:
<预><代码>>>>进口请求>>>从 urllib.parse 导入 urlparse>>>url = 'http://httpbin.org/cookies'>>>s = requests.Session()>>>s.headers.update({... 'Origin':urlparse(url).netloc,...推荐人":网址... })>>>r = s.get(url)>>>s.cookies['cookie1'] = '25'>>>s.cookies['cookie2'] = '25'>>>r = s.get(url, headers={'X-Requested-With':'XMLHttpRequest'})>>>打印(r.text){"cookies": {"cookie1": "25", "cookie2": "25"}}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
解决方案
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"}}
这篇关于使用 Python 请求在请求之间设置新 cookie的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文