gpt4 book ai didi

python - 传入 cookie python 请求

转载 作者:行者123 更新时间:2023-12-01 04:18:57 24 4
gpt4 key购买 nike

我正在使用两个不同的模块来编写代码。我使用 dryscrape 登录 Netflix,而不是使用 requests 来做其他事情。然而,使用 dryscrape,我能够使用 session.cookies() 获取一堆 cookie,它返回了一组 cookie。所以我尝试使用 requests 库将这些 cookie 传递给请求。

但是,我目前在执行此操作时遇到了问题。 Requests 接受一个 cookie 字典,我就是这么做的。

少说,这是简化这种情况的代码..

这是我使用 dryscrape Session.cookies() 获得的 cookie 格式

["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=/"]

但是请求只接受字典,所以我这样做了

cookies_info = dict(cookies_are= ''.join(cookies))
print cookies_info
search_query = 'Sons of Anarchy'
second_requests = requests.get('http://www.netflix.com/search/'+search_query,cookies=cookies_info).text

它对我来说根本不起作用,它不登录 netflix,并要求我登录这样做。我假设这与我以正确的格式正确传递 cookie 有关!

最佳答案

您有一个包含 Set-Cookie header 结果的列表。它们包含一个键值对以及一些元数据。

例如,您的第一个 Cookie header 是这样的:

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

它告诉浏览器您的 Cookie 名称是 NetflixCookies,其值为 true 并且该 Cookie 仅应在联系 netflix.com 中的服务器时使用 域,路径以 / 开头(整个服务器)。

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

cookies = {'NetflixCookies': 'true'}

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

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

>>> from http.cookiejar 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))
{'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'}
>>> 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'}

关于python - 传入 cookie python 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33953141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com