Python的请求聚合SetCookie响应头

2024-10-05 13:21:28 发布

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

我使用的是一个作为代理的无服务器python应用程序。在后台,代理使用requests库向目标资源发起请求,获取响应并返回给调用者。然而,我注意到奇怪的行为。我的目标资源发出2个cookie-响应包含两个带有cookie负载的Set-Cookie头。但是python代码中的响应实际上包含一个Set-Cookie头,两个cookie之间用", "分隔

import requests 

response = requests.get('https://github.com') 
print(response.headers.get('Set-Cookie'))
# _gh_sess=XX; Path=/; HttpOnly; Secure; SameSite=Lax, _octo=XXX; Path=/; Domain=github.com; Expires=Wed, 03 Nov 2021 11:52:55 GMT; Secure; SameSite=Lax, logged_in=no; Path=/; Domain=github.com; Expires=Wed, 03 Nov 2021 11:52:55 GMT; HttpOnly; Secure; SameSite=Lax

如果浏览器尊重这种语法就完全可以了,但是至少对于Chrome 86和Firefox 81来说,它不起作用——浏览器接受第一个cookie,而完全忽略其他cookie

在联机挖掘之后,似乎requests,或者实际上是内部使用的urllib3,使用与所述here相同的名称聚合头

由于cookie在request的CookieJar中可用,因此我认为可以迭代jar并准备每个cookie作为单独的代理响应头:

import requests 

response = requests.get('https://github.com') 

for cookie in response.cookies:
  proxy_cookie = f'{cookie.name}={cookie.value}; expires={cookie.expires}; path={cookie.path}; ...'
  # append to proxy response headers

但这需要检查特定的cookie子字段,并仅在它确实存在时添加它,例如SecureHttpOnly

另一个想法是抓取Set-Cookie响应头并通过", "将其拆分,但事实证明,至少在我的语言环境中,expires字段本身包含", ",因此拆分变得非常危险,显然不可靠

有没有其他聪明的方法来处理cookie响应头而无需复杂的字符串拆分或迭代?我只想以目标资源返回的形式获取响应头,而不需要在此过程中进行额外的转换

多谢各位


Tags: pathgithubcom代理目标getcookieresponse

热门问题