Найти - Пользователи
Полная версия: Помощь в разборе кода
Начало » Python для новичков » Помощь в разборе кода
1 2
FishHook
anpy
 payload = {
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0",
        "Accept": "*/*",
        "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "X-RequestVerificationToken": "CfDJ8Hyt7h5QkHpBl_eWRSZ-2nNaORxuC9Wok6viyAtpSSPMjmjR20qWt2Gqg_JAQyh2SSmc2YvCZLihJmUBKw_4puPE1petl8o6Mt3hSMe11fKwVcbOpn7wH907v4GwnqcUgoaX-aabvm2TTUvc1l-MhJw",
        "X-Requested-With": "XMLHttpRequest",
        "Pragma": "no-cache",
        "Cache-Control": "no-cache",
        "referrer": "https://www.wildberries.ru/catalog/6799402/detail.aspx?targetUrl=GP",
        "body": "cod1s=6799402&characteristicId=",
        "method": "POST",
        }
r= requests.post(url, json=payload)
Это же заголовки HTTP, почему вы их в json засунули?
А вот это cod1s=6799402&characteristicId= это тело запроса, оно как в заголовки попало?
anpy
JOHN_16
вам надо сформировать нормальный запрос, более правильным путем было бы использовать requests.Session что бы пройти авторизацию и потом уже слать запрос на адрес который надо, правильно указав данные (в вашем случае в коде надо было не json=payload, а просто data=payload и то при условии что вы сми данные сформируете корректно)
Вот как раз по вопросу корректного формирования данных и затык. Как я понял нужно заголовки запроса которые показывает отладчик оформить как словарь и передать их пост запросом вместе с урлом.
Если так, то вот такой код отдает 404
 import requests
import json
url="https://www.wildberries.ru/content/cardpromo"
payload= {"Host": "www.wildberries.ru",
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0",
        "Accept": "*/*",
        "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
        "Accept-Encoding": "gzip, deflate, br",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "X-RequestVerificationToken": "CfDJ8Hyt7h5QkHpBl_eWRSZ-2nO-ybP4nAO03AimtU81KxoPoDrUrgonGKGWbWjDn9o99QAyfXCF-3s3RU93oFOmpGAXb27cYKRc0A1nnsR5wL2W67iJTAe2uy9gy8jMFhaKyduyRbkDKKiXEur3Q_AwueU",
        "X-Requested-With": "XMLHttpRequest",
        "Content-Length": "31",
        "Connection": "keep-alive",
        "Referer": "https://www.wildberries.ru/catalog/6799402/detail.aspx?targetUrl=GP",
        "Cookie": "mobile_client=0; ___wbu=4025fa6f-8d15-4c29-a6f3-48ad92c017ac.1565521020; BasketUID=3f4b29c0-852a-4b3c-807d-7bebea81a19b; route=5c031fb422f7c39428a44aed52995e80ef70182f; __wbl=cityId%3D5568%26regionId%3D52%26city%3D%D0%9D%D0%B8%D0%B6%D0%BD%D0%B8%D0%B9%20%D0%9D%D0%BE%D0%B2%D0%B3%D0%BE%D1%80%D0%BE%D0%B4%26phone%3D88312351250%26latitude%3D56%2C325061%26longitude%3D44%2C012811; __store=507_3158_2737_1699_1733_686; __region=30_48_22_4_38_39_1_31_42_33_40; __pricemargin=1.0--; .AspNetCore.Antiforgery.stpccMUKFUM=CfDJ8Hyt7h5QkHpBl_eWRSZ-2nNN_qMuic3RJ21wjdNrabJ3Qr_vl40IcPUcB963FiMbAk1Qw2YZF-F4lG7z8tRWTsxuVBRX4ACKkUwmAEv2yF8InKSVdCKhoqofQFbXuIzKeFjUWcfITfe0ojijLtVj1YQ; ncache=0%3B507_3158_2737_1699_1733_686%3B30_48_22_4_38_39_1_31_42_33_40%3B1.0--; ___wbs=974172b6-ad59-49d5-82ac-f25a8275bc6c.1565624012",
        "DNT": "1",
        "Pragma": "no-cache",
        "Cache-Control": "no-cache",
        "TE": "Trailers"}
r= requests.post(url, data=payload)
print(r)

По поводу requests.Session пока не разобрался, надо добить понимание того что я делаю не так.
К тому же все данные доступны и без авторизации.
py.user.next
FishHook
Это же заголовки HTTP, почему вы их в json засунули?
anpy
 r= requests.post(url, data=payload)
 r = requests.post('http://localhost:12345', headers={'Some': 'hello'})

[guest@localhost ~]$ nc -l 12345
POST / HTTP/1.1
Host: localhost:12345
User-Agent: python-requests/2.13.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Some: hello
Content-Length: 0
anpy
Всем спасибо.
Почитал с утра на свежую голову. Как я понял в POST запросе необходимо было разделить заголовки и данные и поместить их в отдельные зарезервированные переменные (headers и data).
Проблема в понимании была в том, что я упустил из вида, что есть специальная переменная headers, я почему то думал, что переменных может быть только две (url и data) и пытался все засунуть в data.

Вот код который у меня работает.
 import requests
import json
url="https://www.wildberries.ru/content/cardpromo"
headers= {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0",
        "X-Requested-With": "XMLHttpRequest",
        "Referer": "https://www.wildberries.ru/catalog/6799402/detail.aspx?targetUrl=GP"}
payload={"cod1s": 6799402}
r= requests.post(url, headers=headers, data=payload)
response_data = r.json()
print(response_data)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB