我使用的是一个作为代理的无服务器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子字段,并仅在它确实存在时添加它,例如Secure
或HttpOnly
另一个想法是抓取Set-Cookie
响应头并通过", "
将其拆分,但事实证明,至少在我的语言环境中,expires
字段本身包含", "
,因此拆分变得非常危险,显然不可靠
有没有其他聪明的方法来处理cookie响应头而无需复杂的字符串拆分或迭代?我只想以目标资源返回的形式获取响应头,而不需要在此过程中进行额外的转换
多谢各位
目前没有回答
相关问题 更多 >
编程相关推荐