Cannot get Set Cookie value python requests headers

问题描述 投票:0回答:1

我正在尝试从一个请求中获取一个特定的 cookie,我可以看到它是通过一个特定的端点在浏览器中设置的,就像这样

https://www.store.com/cart/miniCart/TOTAL?_=1591997339780

这些是我通过 Chrome Dev Tools 看到的响应头

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
CF-Cache-Status: DYNAMIC
CF-RAY: 5a26c442fb22801a-SAN
cf-request-id: 034c18fddd0000801ac6b42200000001
Connection: keep-alive
Content-Encoding: gzip
Content-Language: es
Content-Type: application/json;charset=UTF-8
Date: Fri, 12 Jun 2020 21:46:48 GMT
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Expires: 0
Pragma: no-cache
Server: cloudflare
Set-Cookie: JSESSIONID=18A8A12169ED6472A7359160F663CCF8; Path=/; Secure; HttpOnly
set-cookie: store-cart=d49a003e-41b5-444a-a71d-26b6f8db201c; Expires=Sun, 09-Nov-2031 13:46:48 GMT; Path=/; Secure; HttpOnly
set-cookie: AWSELB=11E5B3D30C8ACAF6D3240C8807474BBC740A29E2E0C61131788A04E3E6A646357EAA774C0A57B3DA33B571BADB93658470F13A3C847B4477CA237BB286CE5F3813ACBA53EEB69427F5D135043AFB3B2DC4835F3057;PATH=/;SECURE;HTTPONLY
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Transfer-Encoding: chunked
Via: 1.1 www.innvictus.com
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block

但是通过 Python 请求,我仅通过 response.headers 在我的浏览器和我的代码中使用准确的请求标头获得以下标头

{'Date': 'Fri, 12 Jun 2020 21:56:36 GMT', 'Content-Type': 'application/json;charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Cache-Control': 'no-cache, no-store, max-age=0, must-revalidate', 'Content-Language': 'es', 'Expires': '0', 'Pragma': 'no-cache', 'Set-Cookie': 'JSESSIONID=66AA2037611590192D2E13C38FF65289; Path=/; Secure; HttpOnly, AWSELB=11E5B3D30C8ACAF6D3240C8807474BBC740A29E2E0D0EAFB9AD200F275E3F63597988B98E611188683EDE09A5FA437554B92ECADED7B4477CA237BB286CE5F3813ACBA53EEF44544C6AD7FBBF8C242FCAC378603C5;PATH=/;SECURE;HTTPONLY', 'Strict-Transport-Security': 'max-age=31536000 ; includeSubDomains', 'Via': '1.1 www.store.com', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'SAMEORIGIN', 'X-XSS-Protection': '1; mode=block', 'CF-Cache-Status': 'DYNAMIC', 'cf-request-id': '034c21f9160000e6f09b961200000001', 'Expect-CT': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', 'Server': 'cloudflare', 'CF-RAY': '5a26d2a1beb9e6f0-EWR', 'Content-Encoding': 'gzip'} 

我需要的 cookie 是“store-cart=d49a003e-41b5-444a-a71d-26b6f8db201c; Expires=Sun, 09-Nov-2031 13:46:48” cookie 但正如你在我得到的字典中看到的那样响应.headers

python python-requests e-commerce
1个回答
1
投票

Python 请求无法正确解析 cookie。 查看未解决的问题:https://github.com/psf/requests/issues/6344

这是我的快速解决方法:

def parse_cookies(response, session):
    """
    requests package doesn't parse cookies correctly. :-(
    parse them here and add to cookie jar
    """
    setcookie = response.headers['Set-Cookie']
    if (setcookie != None):
        # can't just split on , because the date format in expires attr has commas.
        # ... expires=Wed, 22 Feb...
        # so strip the commas from the expires dates first.
        setcookie = re.sub(r"expires=(...), ", r"expires=\1 ", setcookie)
        for cookie in setcookie.split(','):
            name, value = cookie.strip().split(';')[0].split('=')
            print({name : value})
            requests.utils.add_dict_to_cookiejar(session.cookies, {name : value})

在每次设置 cookie 的响应后调用它。

  • response 是 session.post(...) 的返回值
  • session 是 requests.session() 的返回值

注意:它不会在 cookie 上设置过期日期或路径。

© www.soinside.com 2019 - 2024. All rights reserved.