How can i extract cookies like this?

Question:

Hello guys I am making a bot in python requests to register a site and verify phone number however when I want to extract cookies I only get it like this this is one of the cookies: {'__cf_bm': 'Y0T3GzPQqXsWAnmYUSNWoaEogoto8_OELyA_wo_FUqQ-1662189807-0-Adw17pUjv2YaGcp3ynR1CX3CvGY/4AMBCJWqCn0GIk2qbGXQPifeKXlo5IN+iaDCsqeXrTN32gNXpdybETEYT6U='}

I want to extract them like this for each cookie:

{
        "name": "__cf_bm",
        "value": "je.AFZpQXtMPL7oZPdgCV6Bo4UxCb3BqMYdu2L7Eol0-1662189210-0-ARq9RgTbX7ItgRQ6dBXYjEdvQS8/fP7JiVibVrHYspk37sUiN3mQOlnHBfkJdMG033inhnAIS92vthv8bLdeYYQ=",
        "domain": ".yemeksepeti.com",
        "hostOnly": false,
        "path": "/",
        "secure": true,
        "httpOnly": true,
        "sameSite": "no_restriction",
        "session": false,
        "firstPartyDomain": "",
        "partitionKey": null,
        "expirationDate": 1662191010,
        "storeId": "firefox-default",
        "id": 1
    }

this is the reproducible for register and then get the cookies from requests:

import json
import time
import requests
import selenium.webdriver
import urllib3
import random
import string
import secrets

password_length = 13
password = secrets.token_urlsafe(password_length)
file1 = open("Original.txt", "w")

kacAdet = int(input('Kaç adet hesap kaydetmek istiyorsunuz?'))

proxies = {
    'http': '23.229.62.241:3128',

}


def random_char(char_num):
    return ''.join(random.choice(string.ascii_letters) for _ in range(char_num))


email = random_char(4)
print(random_char(4))

for i in range(kacAdet):
    cookies = {
        'dhhPerseusGuestId': '1661866956.4391864905.SzayaOAaKf',
        '_gcl_au': '1.1.2045638547.1656310028',
        '_pxvid': '60553c6b-f5df-11ec-b676-644a4b4e486e',
        '_ga_W5PM07D07L': 'GS1.1.1661866956.12.1.1661871822.0.0.0',
        '_ga': 'GA1.2.302729117.1656310029',
        '_tq_id.TV-276372-1.c7a5': 'b3e61a11d2f82260.1656310030.0.1661871797..',
        '__ssid': '288a4fe9f40bd5024bd37c43ed7b18f',
        '_fbp': 'fb.1.1656310031494.1660145579',
        'device_token': 'eyJhbGciOiJSUzI1NiIsImtpZCI6ImtleW1ha2VyLXZvbG8tZGV2aWNlLXlzLXRyIiwidHlwIjoiSldUIn0.eyJpZCI6Ijk2MzI1ZThhLTVjYmQtNDk3NC1iZmYzLTgzYjdjMWZhMDdiZSIsImNsaWVudF9pZCI6InZvbG8iLCJ1c2VyX2lkIjoidHI4anBkOHMiLCJleHBpcmVzIjo0ODA5OTEwMDQ0LCJ0b2tlbl90eXBlIjoiYmVhcmVyIiwic2NvcGUiOiJERVZJQ0VfVE9LRU4ifQ.qlV25H4fL5mN9uHVHK-0VGpC6UZziOMfxpY5EbDXRCPeitQY-dfks5CA60Qj59alrbna3Ew5SS96HZ7elMOCDWDk9Al3RSBDgCoZNhn10jVexrmqqVBebRZyF27qh49tb1WoGE5FzWvX0MvlZA-1fvXCciPsHlRuKzr6oKPr4iZ2ilRBye9YwClEdpnu2ymg19moJhZn8oDmVotNAnEOC4tsRC64nXHT14rnU3zNx6yds1eeIjImOM-1u99lxOjmbTuBkQJWNEUxucimnA2RUe3VmZKhFronpM46ChdZr0f8xU7hvxGCZ2NxSVlN-uN79oHYThIgcxbaP0NjPajRcg',
        'ab.storage.userId.f767a324-7168-4b7e-8687-652a3ac864bd': '%7B%22g%22%3A%22TR_44270161%22%2C%22c%22%3A1661869740576%2C%22l%22%3A1661869740576%7D',
        'ab.storage.deviceId.f767a324-7168-4b7e-8687-652a3ac864bd': '%7B%22g%22%3A%224c13c6a1-fbd2-04ec-5d84-b972ec0ba576%22%2C%22c%22%3A1656310045145%2C%22l%22%3A1656310045145%7D',
        '_hjSessionUser_1543571': 'eyJpZCI6ImE2MGI0MTQ2LTAzMGQtNWUwOS05YjhmLWZmMGRjNGE4YjRlOCIsImNyZWF0ZWQiOjE2NTYzMTA3MDg3NzIsImV4aXN0aW5nIjp0cnVlfQ==',
        'AppVersion': '0ff5617',
        '_gid': 'GA1.2.267011508.1661808541',
        '__cf_bm': 'tjx3_.dOiiolQhAxWstqrkSP1CKvO_S1N4p.0EeINK4-1661871791-0-AUZhgLbPnAeoeXTbqYZ9zWdoMEV/paQVlVDqhYwfMhjTEpAzR9DL6w/R9PJ/UunzV1kS0E5eHo3I23DtfqQbu2g=',
        'dhhPerseusSessionId': '1661866956.9452682616.Q3sF0bSpb0',
        'dhhPerseusHitId': '1661871837551.356435850558823550.x7vphunw0q',
        'ab.storage.sessionId.f767a324-7168-4b7e-8687-652a3ac864bd': '%7B%22g%22%3A%226aa2e303-cb5c-e1cd-d63c-ae74f0ef9a28%22%2C%22e%22%3A1661873591540%2C%22c%22%3A1661869740577%2C%22l%22%3A1661871791540%7D',
        'hl': 'tr',
        '_pxhd': '7s9aESLpFRxZZKv6tpZw1ARL/WCcfDvZ/5vEGc7NJzvNODk0RH90lYQB4Eua5Kqza/RouLT9ZEDCwApCgb6LWA==:fdJxKPXZt-rd6WPHmuK4PmpAXFudob0AhmJ-XL04XjMoHApgWh/7FNngAW72wqaDqlEmfZDx6D2EV-3kuOsLqWb15qT-85pfWFSmnayR70k=',
        '_px3': 'e298931c318130994efbdc870fa364efa1eab482a8e5234e8667c760ad79fba0:6SPR0+3825cPBG3QzlECszOACYSdPXJLRT/ifAegNKTC7Ky1is4UYFhA01ROdi9t5FPC67v5CjaqHtWa7tzTuQ==:1000:DVJEiHg7S1XrIagRXrM6VXHwU2ozpb8RE2lXnVttxjQFilQ+GEHfG07sM+9BqFSgi69SNwFOgo8/C3CALs2K5rm1G7jyBJ432cNubNkJx+jEy2YeDw5fFuUlytWWtZDt+qcrwX9wwFJi/j6POWqnm9j1aZuVEztpuZnSLs0D0QZBZV0qaOPaQwxJw9vLCsigsgKcWGAbfbRMvVKXx0Cevw==',
        'pxcts': 'deb1b68a-2874-11ed-9c26-6c6e70485242',
        'tooltip-reorder': 'true',
        '_dc_gtm_UA-86673819-11': '1',
        '_dd_s': 'logs=1&id=38095de6-1b84-4b17-a32c-c539cfaf0dca&created=1661871796050&expire=1661872741919',
        '_pxff_fp': '1',
    }

    headers = {
        'Host': 'www.yemeksepeti.com',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0',
        'Accept': 'application/json',
        'Accept-Language': 'tr-TR,tr;q=0.8,en-US;q=0.5,en;q=0.3',
        'Content-Type': 'multipart/form-data; boundary=---------------------------19743795514118722864129047497',
        'X-Requested-With': 'XMLHttpRequest',
        'X-Device-Fingerprint': 'db5f21349eff189ec4f7664477e01cd4',
        'X-Device': 'eyJhbGciOiJSUzI1NiIsImtpZCI6ImtleW1ha2VyLXZvbG8tZGV2aWNlLXlzLXRyIiwidHlwIjoiSldUIn0.eyJpZCI6Ijk2MzI1ZThhLTVjYmQtNDk3NC1iZmYzLTgzYjdjMWZhMDdiZSIsImNsaWVudF9pZCI6InZvbG8iLCJ1c2VyX2lkIjoidHI4anBkOHMiLCJleHBpcmVzIjo0ODA5OTEwMDQ0LCJ0b2tlbl90eXBlIjoiYmVhcmVyIiwic2NvcGUiOiJERVZJQ0VfVE9LRU4ifQ.qlV25H4fL5mN9uHVHK-0VGpC6UZziOMfxpY5EbDXRCPeitQY-dfks5CA60Qj59alrbna3Ew5SS96HZ7elMOCDWDk9Al3RSBDgCoZNhn10jVexrmqqVBebRZyF27qh49tb1WoGE5FzWvX0MvlZA-1fvXCciPsHlRuKzr6oKPr4iZ2ilRBye9YwClEdpnu2ymg19moJhZn8oDmVotNAnEOC4tsRC64nXHT14rnU3zNx6yds1eeIjImOM-1u99lxOjmbTuBkQJWNEUxucimnA2RUe3VmZKhFronpM46ChdZr0f8xU7hvxGCZ2NxSVlN-uN79oHYThIgcxbaP0NjPajRcg',
        'Origin': 'https://www.yemeksepeti.com',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'Referer': 'https://www.yemeksepeti.com/login/new?step=registration',
    }

    data = '-----------------------------19743795514118722864129047497rnContent-Disposition: form-data; name="_target_path"rnrnhttps://www.yemeksepeti.com/rn-----------------------------19743795514118722864129047497rnContent-Disposition: form-data; name="customer[first_name]"rnrnmertrn-----------------------------19743795514118722864129047497rnContent-Disposition: form-data; name="customer[last_name]"rnrndemirrn-----------------------------19743795514118722864129047497rnContent-Disposition: form-data; name="customer[email]"rnrnmertdemir' + email + str(i) + '@gmail.comrn-----------------------------19743795514118722864129047497rnContent-Disposition: form-data; name="customer[password]"rnrn'+str(password)+'rn-----------------------------19743795514118722864129047497rnContent-Disposition: form-data; name="customer[birthdate]"rnrn1999-10-01rn-----------------------------19743795514118722864129047497rnContent-Disposition: form-data; name="customer[terms_and_conditions_consent]"rnrnagreedrn-----------------------------19743795514118722864129047497rnContent-Disposition: form-data; name="customer[marketing_consent]"rnrnopt-inrn-----------------------------19743795514118722864129047497rnContent-Disposition: form-data; name="customer[marketing_sms_consent]"rnrnopt-inrn-----------------------------19743795514118722864129047497--rn'

    response = requests.post('https://www.yemeksepeti.com/api/v1/customers/async_register', cookies=cookies,
                             headers=headers, data=data, verify=False)
    my_cookies = requests.utils.dict_from_cookiejar(response.cookies)
    print(my_cookies)
    print(response.status_code)
Asked By: Hakan Yazıcı

||

Answers:

Don’t use dict_from_cookiejar but write own code to convert it.

for item in response.cookies:
    print('name  :', item.name)
    print('value :', item.value)
    print('domain:', item.domain)
    print('path  :', item.path)
    # ... other attributes ...
    print('---')

EDIT:

Eventually you can use __dict__ to get all attributes as dictionary.

for item in response.cookies:
    print(item.__dict__)

You may also get original data as string and parse it on your own.

print( response.headers['Set-Cookie'] )

EDIT:

import json

all_items = []

for item in response.cookies:
    all_items.append(tem.__dict__)

# --- write ---

text = json.dumps(all_items)

with open('data.json', 'w') as fh:
    fh.write(text)
    
# --- read ---

with open('data.json') as fh:
    text = fh.read()

all_items = json.loads(text)
Answered By: furas
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.