Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 12, 2019 18:04:46

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помощь в разборе кода

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= это тело запроса, оно как в заголовки попало?



Офлайн

#2 Авг. 12, 2019 19:44:06

anpy
Зарегистрирован: 2019-08-12
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помощь в разборе кода

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 пока не разобрался, надо добить понимание того что я делаю не так.
К тому же все данные доступны и без авторизации.

Офлайн

#3 Авг. 13, 2019 02:10:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Помощь в разборе кода

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



Отредактировано py.user.next (Авг. 13, 2019 02:16:11)

Офлайн

#4 Авг. 13, 2019 11:52:13

anpy
Зарегистрирован: 2019-08-12
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Помощь в разборе кода

Всем спасибо.
Почитал с утра на свежую голову. Как я понял в 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version