Форум сайта python.su
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)
Офлайн
JOHN_16Вот как раз по вопросу корректного формирования данных и затык. Как я понял нужно заголовки запроса которые показывает отладчик оформить как словарь и передать их пост запросом вместе с урлом.
вам надо сформировать нормальный запрос, более правильным путем было бы использовать requests.Session что бы пройти авторизацию и потом уже слать запрос на адрес который надо, правильно указав данные (в вашем случае в коде надо было не json=payload, а просто data=payload и то при условии что вы сми данные сформируете корректно)
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)
Офлайн
FishHook
Это же заголовки HTTP, почему вы их в json засунули?
anpyr= 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
Отредактировано py.user.next (Авг. 13, 2019 02:16:11)
Офлайн
Всем спасибо.
Почитал с утра на свежую голову. Как я понял в 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)
Отредактировано anpy (Авг. 13, 2019 12:22:47)
Офлайн