python - 按原样单独获取 cookie - Python 请求
问题描述
因此,我正在尝试使用库编写一个小脚本,该requests
库向站点(例如 github.com)发出请求,并解析响应标头中的 cookie。因此,当您向 github.com 发出请求时,会有 3 个不同的Set-Cookie
标头:
Set-Cookie: has_recent_activity=1; path=/; expires=Thu, 27 Dec 2018 07:54:16 -0000
Set-Cookie: logged_in=no; domain=.github.com; path=/; expires=Mon, 27 Dec 2038 06:54:16 -0000; secure; HttpOnly
Set-Cookie: _gh_sess=MldFM3p...; path=/; secure; HttpOnly
requests
现在,当您通过API发出请求并通过检查Set-Cookie
标头时req.headers.get('Set-Cookie')
,所有这些 cookie 值都会聚集为一个,如下所示:
has_recent_activity=1; path=/; expires=Thu, 27 Dec 2018 07:54:16 -0000, logged_in=no; domain=.github.com; path=/; expires=Mon, 27 Dec 2038 06:54:16 -0000; secure; HttpOnly, _gh_sess=MldFM3p...; path=/; secure; HttpOnly
所以我的问题是如何获得3 个完全独立的完整 cookie,因为它是由服务器发送的以及所有 cookie 元数据信息(可能以列表的形式)?
我是 Python 的新手,所以任何帮助都将不胜感激。干杯!
解决方案
老实说,我无法理解您想在问题评论中了解什么,但是如果您想要解决以下问题的方法,那将很容易。
所以我的问题是如何获得 3 个完全独立的 cookie,因为它是由服务器发送的(可能以列表的形式)?
import requests
with requests.Session() as s:
resp = s.get("https://github.com")
print(resp.cookies)
#resp.cookies.items()
#resp.cookies.get_dict()
# More details: http://docs.python-requests.org/en/master/_modules/requests/cookies/
<RequestsCookieJar[
<Cookie logged_in=no for .github.com/>,
<Cookie _gh_sess=UHd5aUZ0ZXlBVDVPMitaVVBaWFp0c1p6dFA0TWVSanJzRGgrbU1XbVkxV3VXRW9LeWgwWHpWZ2pOOHFxZmtGaTZpRExpT2NjTHRyK3hHZG5GZjlxTzllbklqK0thQytHYi9HZWsrZ1poZ1ZUakJkRU9OZmJINEh3QUR2N3h3UUh6aVdFTmFCRHlHcVpwWHo1bEM5d25adnhUemJ6Y3pFMUxTbk50Q0M0UUJrVG5hR3kxRUVoUTB2TjdUc2hWbHk3cDJDWUZ4UW85NVRuR09keFJRTlc1QT09LS1RUnZHWUpsQ3BQU0hPZGtsWDAxQXFBPT0%3D--d2bd04e94c369f425fb7e9cc57b5b5499909b140 for github.com/>,
<Cookie has_recent_activity=1 for github.com/>]>
它也可以通过正则表达式(regex101_A regex101_B)提取
import requests, re
with requests.Session() as s:
resp = s.get("https://github.com")
show_cookie = lambda x: [re.findall(r"([^,;\s]*?=.*?(?=;|$))|(\w+(?=;|$|,))",cookie) for cookie in re.findall(r"((?:^|,\s).*?)(?=,\s\S+;|$)",x)]
print(show_cookie(resp.headers.get('Set-Cookie')))
[[('has_recent_activity=1', ''), ('path=/', ''), ('expires=Sat, 29 Dec 2018 14:43:45 -0000', '')], [('logged_in=no', ''), ('domain=.github.com', ''), ('path=/', ''), ('expires=Wed, 29 Dec 2038 13:43:45 -0000', ''), ('', 'secure'), ('', 'HttpOnly')], [('_gh_sess=eHBNWkZscHFMeXJ3NEJUU0VXZlBQaHg0S01rby9MK24xNnFvR3gvVTBsOUJjTWNWenJPZ0RRdk9RNE9ZV2V0MTQ1bTg2NEduY3phSWRrd3l0L252KzBJNkRYZlpjWXh5c2NBZktkWGFsdjZDbEJjTEdhVmZ0YnpldDFHTEpuQzFTcDNNS21sT3BRaHhBVUFqTHQ1cDZyQWNPU005ODY0bFh0MGxCbWI5d2kwait5RlcvVjlUc2FwTTdNRE8wOHZQb0RGak5YbG1ZSDJTM2ZpQmVUUkkrdz09LS11M0ZHem1YYjdWYkVLaWtRMkhscW5nPT0%3D--f778e2d24e96f3386a2da36e2d33d2b73418deed', ''), ('path=/', ''), ('', 'secure'), ('', 'HttpOnly')]]
推荐阅读
- python - 在 Python 中实现差分(非微分)方程
- django - django serialize 由于某种原因排除主键
- scala - 在scala中,如何使用其通用成员的ClassTag创建一个专门类的ClassTag?
- c# - .Net Core 3.1 SignalR - 无法使用 .NET 客户端包从客户端读取服务器上的消息
- matlab - 加快 Matlab 中的表格过滤
- javascript - 反应错误:'values'未定义,no-undef
- r - 以 r 中的多列为条件重新编码 NA
- python - 如何使用matplotlib将精确位置的图片添加到图形中?
- c# - 蛇。增加死亡后继续游戏的可能性
- docker - nginx &letsencrypt - 文件结尾,期待“;” 或者 ”}”