传入cookie python请求

2024-09-30 16:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我用两个不同的模块来编写代码。 我用dryscrape登录netflix,而不是用请求来做其他事情。然而,使用dryscrap我可以得到一堆饼干使用会话.cookies(),它返回了一系列cookies。所以我尝试使用请求库将这些cookie传递给请求。在

但是,我现在在做这件事时遇到了一个问题。请求需要一个cookie字典,我做了。在

下面是简化这种情况的代码。。在

这是我用dryscrap得到的cookie格式会话.cookies()

["NetflixCookies=true; domain=.netflix.com; path=/", "hcVisitorId=b0ada616-e472-4a89-9bd6-35c6adbdf48a; expires=Sat, 26-Nov-2016 07:30:55 GMT; domain=.help.netflix.com; path=/", "cL=1448609468009%7C144860945956982159%7C144860945964708782%7C%7C5%7C; domain=.www.netflix.com; path=/", "netflixHelpCenterLocale=en-US; domain=.help.netflix.com; path=/", "JSESSIONID=8641E508022EEE2E146073D62A320319; HttpOnly; domain=help.netflix.com; path=/", "memclid=b0ada616-e472-4a89-9bd6-35c6adbdf48a; expires=Sat, 26-Nov-2016 07:31:03 GMT; domain=.netflix.com; path=/"]

但是请求只需要一本字典,所以我就这么做了

^{pr2}$

它对我根本不起作用,它不登录netflix,并要求我这样登录。我想这和我用正确的格式传递cookies有关!在


Tags: path代码com字典cookiedomain格式help
1条回答
网友
1楼 · 发布于 2024-09-30 16:29:31

您有一个带有Set-Cookie标题结果的列表。它们包含一个键值对和一些元数据。在

例如,第一个cookie头是:

NetflixCookies=true; domain=.netflix.com; path=/

它告诉浏览器你的cookie名称是NetflixCookies,它的值是true,只有在联系netflix.com域中的服务器时,才应该使用cookie,路径以/(整个服务器)开头。在

但是,当您将cookies发送回服务器时,不需要所有这些元数据。只发送键值对。因此,requests方法的cookies参数接受这些键值对的字典,而不是元数据。对于上面的cookie,您可以使用这个:

^{pr2}$

对于其他cookie,您必须提取它们的cookie名称和值,并将这些名称用作字典中的键。在

要解析头,只需使用cookilib.parse_ns_headers()函数;它将返回一个列表,其中每个header包含元组对;第一个元组是您的键值对:

>>> from cookielib import parse_ns_headers                                                                                                                                                            
>>> cookies = ["NetflixCookies=true; domain=.netflix.com; path=/", "hcVisitorId=b0ada616-e472-4a89-9bd6-35c6adbdf48a; expires=Sat, 26-Nov-2016 07:30:55 GMT; domain=.help.netflix.com; path=/", "cL=1448609468009%7C144860945956982159%7C144860945964708782%7C%7C5%7C; domain=.www.netflix.com; path=/", "netflixHelpCenterLocale=en-US; domain=.help.netflix.com; path=/", "JSESSIONID=8641E508022EEE2E146073D62A320319; HttpOnly; domain=help.netflix.com; path=/", "memclid=b0ada616-e472-4a89-9bd6-35c6adbdf48a; expires=Sat, 26-Nov-2016 07:31:03 GMT; domain=.netflix.com; path=/"]
>>> for result in parse_ns_headers(cookies):
...     print result[0]
...
('NetflixCookies', 'true')
('hcVisitorId', 'b0ada616-e472-4a89-9bd6-35c6adbdf48a')
('cL', '1448609468009%7C144860945956982159%7C144860945964708782%7C%7C5%7C')
('netflixHelpCenterLocale', 'en-US')
('JSESSIONID', '8641E508022EEE2E146073D62A320319')
('memclid', 'b0ada616-e472-4a89-9bd6-35c6adbdf48a')

你可以把这个结果直接放到字典里:

cookie_dictionary = dict(res[0] for res in parse_ns_headers(session_cookies))

例如,生成特定的示例:

>>> dict(res[0] for res in parse_ns_headers(cookies))
{'memclid': 'b0ada616-e472-4a89-9bd6-35c6adbdf48a', 'cL': '1448609468009%7C144860945956982159%7C144860945964708782%7C%7C5%7C', 'NetflixCookies': 'true', 'JSESSIONID': '8641E508022EEE2E146073D62A320319', 'hcVisitorId': 'b0ada616-e472-4a89-9bd6-35c6adbdf48a', 'netflixHelpCenterLocale': 'en-US'}
>>> from pprint import pprint
>>> pprint(_)
{'JSESSIONID': '8641E508022EEE2E146073D62A320319',
 'NetflixCookies': 'true',
 'cL': '1448609468009%7C144860945956982159%7C144860945964708782%7C%7C5%7C',
 'hcVisitorId': 'b0ada616-e472-4a89-9bd6-35c6adbdf48a',
 'memclid': 'b0ada616-e472-4a89-9bd6-35c6adbdf48a',
 'netflixHelpCenterLocale': 'en-US'}

相关问题 更多 >