Получить куки отдельно, как есть - Python Requests - PullRequest
0 голосов
/ 27 декабря 2018

Поэтому я пытаюсь написать небольшой скрипт с библиотекой requests, который выполняет запрос к сайту (например, github.com) и анализирует файлы cookie в заголовках ответа.Поэтому, когда вы отправляете запрос на github.com, есть 3 различных Set-Cookie заголовка:

Set-Cookie: has_recent_activity=1; path=/; expires=Thu, 27 Dec 2018 07:54:16 -0000
Set-Cookie: logged_in=no; domain=.github.com; path=/; expires=Mon, 27 Dec 2038 06:54:16 -0000; secure; HttpOnly
Set-Cookie: _gh_sess=MldFM3p...; path=/; secure; HttpOnly

Теперь, когда вы делаете запрос через requests API и проверяете заголовок Set-Cookieчерез req.headers.get('Set-Cookie') все эти значения файлов cookie объединяются в одно:

has_recent_activity=1; path=/; expires=Thu, 27 Dec 2018 07:54:16 -0000, logged_in=no; domain=.github.com; path=/; expires=Mon, 27 Dec 2038 06:54:16 -0000; secure; HttpOnly, _gh_sess=MldFM3p...; path=/; secure; HttpOnly

Поэтому мой вопрос заключается в том, как получить 3 отчетливо отдельных неповрежденных файлов cookie , отправленных сервером.наряду со всей информацией метаданных cookie (может быть, в форме списка)?

Я новичок в Python, поэтому любая помощь будет высоко оценена.Ура!

1 Ответ

0 голосов
/ 28 декабря 2018

Честно говоря, я не могу понять, что вы хотите знать в комментариях к вопросу, но если вы хотите найти способ решить вопрос ниже, это будет легко.

Так что мой вопрос: какМогу ли я получить 3 отдельных файла cookie, отправленных сервером (возможно, в виде списка)?

import requests
with requests.Session() as s:
    resp = s.get("https://github.com")
    print(resp.cookies)
    #resp.cookies.items()
    #resp.cookies.get_dict()
    # More details: http://docs.python-requests.org/en/master/_modules/requests/cookies/

<RequestsCookieJar[
<Cookie logged_in=no for .github.com/>,
<Cookie _gh_sess=UHd5aUZ0ZXlBVDVPMitaVVBaWFp0c1p6dFA0TWVSanJzRGgrbU1XbVkxV3VXRW9LeWgwWHpWZ2pOOHFxZmtGaTZpRExpT2NjTHRyK3hHZG5GZjlxTzllbklqK0thQytHYi9HZWsrZ1poZ1ZUakJkRU9OZmJINEh3QUR2N3h3UUh6aVdFTmFCRHlHcVpwWHo1bEM5d25adnhUemJ6Y3pFMUxTbk50Q0M0UUJrVG5hR3kxRUVoUTB2TjdUc2hWbHk3cDJDWUZ4UW85NVRuR09keFJRTlc1QT09LS1RUnZHWUpsQ3BQU0hPZGtsWDAxQXFBPT0%3D--d2bd04e94c369f425fb7e9cc57b5b5499909b140 for github.com/>,
<Cookie has_recent_activity=1 for github.com/>]>

Также можно извлечь с помощью регулярных выражений ( regex101_A regex101_B )

import requests, re
with requests.Session() as s:
    resp = s.get("https://github.com")
    show_cookie = lambda x: [re.findall(r"([^,;\s]*?=.*?(?=;|$))|(\w+(?=;|$|,))",cookie) for cookie in re.findall(r"((?:^|,\s).*?)(?=,\s\S+;|$)",x)]
    print(show_cookie(resp.headers.get('Set-Cookie')))
[[('has_recent_activity=1', ''), ('path=/', ''), ('expires=Sat, 29 Dec 2018 14:43:45 -0000', '')], [('logged_in=no', ''), ('domain=.github.com', ''), ('path=/', ''), ('expires=Wed, 29 Dec 2038 13:43:45 -0000', ''), ('', 'secure'), ('', 'HttpOnly')], [('_gh_sess=eHBNWkZscHFMeXJ3NEJUU0VXZlBQaHg0S01rby9MK24xNnFvR3gvVTBsOUJjTWNWenJPZ0RRdk9RNE9ZV2V0MTQ1bTg2NEduY3phSWRrd3l0L252KzBJNkRYZlpjWXh5c2NBZktkWGFsdjZDbEJjTEdhVmZ0YnpldDFHTEpuQzFTcDNNS21sT3BRaHhBVUFqTHQ1cDZyQWNPU005ODY0bFh0MGxCbWI5d2kwait5RlcvVjlUc2FwTTdNRE8wOHZQb0RGak5YbG1ZSDJTM2ZpQmVUUkkrdz09LS11M0ZHem1YYjdWYkVLaWtRMkhscW5nPT0%3D--f778e2d24e96f3386a2da36e2d33d2b73418deed', ''), ('path=/', ''), ('', 'secure'), ('', 'HttpOnly')]]
...