Задать вопрос
@pronetey2

Чем отличается запрос python-requests от запроса Fiddler?

Привет!
Сервер каким-то образом умеет отличать запрос python-requests от запроса Fiddler.
Отправляю на сервер запрос с помощью python-requests. Сервер отвечает ошибкой:

{"body":{"phone":{"value":null,"error":"required"}},"email":null,"status":400,"htmlencoded":false}


Открываю Fiddler, снифаю этот же самый запрос из requests - абсолютно та же ситуация:

{"body":{"phone":{"value":null,"error":"required"}},"email":null,"status":400,"htmlencoded":false}


Но если в самом Fiddler я нажму на этот запрос Replay -> Reissue Requests, то запрос выполнится снова и ответ уже будет положительным и содержать токен:

{"body":{"additional":{},"token":"bSCwMAjwyQ31kRZ3"},"email":null,"status":200,"htmlencoded":false}


Есть какое-то фундаментальное отличие в методе отправки запросов между requests и Fiddler. Напомню, что запрос один и тот же, абсолютно, точь в точь.
Для более правильного понимания ситуации, прикрепляю скриншоты.

61ef0fc2b5a31882521244.png
61ef0fce58eee443152165.png
61ef0fdf58932039296882.png

Вот сам код на Python:

import requests

def check():
    
    session = requests.session()
    proxies={'http': 'http://127.0.0.1:9988','https':'http:127.0.0.1:9988'} # НУЖНО указать свой порт от Fiddler, у меня 9988, но обычно это 8888

    #Задаем заголовки
    headers = {
        'Host': 'account.mail.ru',
        'Connection': 'keep-alive',
        'Content-Length': '2662',
        'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"',
        'sec-ch-ua-mobile': '?1',
        'User-Agent': 'Mozilla/5.0 (Linux; Android 7.1.2; SM-U614M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36',
        'Accept': 'application/json, text/plain, */*',
        'X-Requested-With': 'XMLHttpRequest',
        'X-Request-Id': '86c3d6b-d649-f6e2-a9f4-968c35b483d5',
        'sec-ch-ua-platform': "Android",
        'Origin': 'https://account.mail.ru',
        'Sec-Fetch-Site': 'same-origin',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Dest': 'empty',
        'Referer': 'https://account.mail.ru/signup?from=main_m_touch',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'ru-RU,ru;q=0.9',
        'Cookie': ''
        }





    
    fp = '{"screen":{"availWidth":"854","availHeight":"480","width":"854","height":"480","colorDepth":"24","pixelDepth":"24","availLeft":"0","availTop":"0"},"navigator":{"vendorSub":"","productSub":"20030107","vendor":"Google Inc.","maxTouchPoints":"5","doNotTrack":"inaccessible","hardwareConcurrency":"4","cookieEnabled":"true","appCodeName":"Mozilla","appName":"Netscape","appVersion":"5.0 (Linux; Android 7.1.2; SM-U614M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36","platform":"Linux i686","product":"Gecko","userAgent":"Mozilla/5.0 (Linux; Android 7.1.2; SM-U614M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36","language":"ru-RU","onLine":"true","webdriver":"false","pdfViewerEnabled":"false","deviceMemory":"4"},"flash":{"version":"inaccessible"}}'
    



   
    form = {
	'extended': (None, 'true'),
	'more_password_strength': (None, '1'),
	'context': (None, 'signup'),
	'browser': '',
	'from': (None, 'main_m_touch'),
	'sent_me_ads': (None, 'true'),
	'sent_me_ads_common': (None, 'true'),
	'name': (None, '{"first": "karina","last": "famina"}'),
	'birthday': (None, '{"day": 2,"month": 4,"year": 1996}'),
	'sex': (None, 'female'),
	'login': (None, 'sfwergdhj5'),
	'domain': (None, 'mail.ru'),
	'password': (None, '===aaa===aaa'),
	'restore': (None, '{"secret": "-","secret_answer": "-","additional_email": "gdsghy1td@ghfgyjhg.ru"}'),
	'htmlencoded': (None, 'false'),
	'utm': (None, '{"source": "","medium": "","campaign": "","term": "","content": ""}')}







    form['browser'] = (None, fp) #задаем отпечаток в форму
    form = dict(form)
    session.headers = headers 
    php = 'https://account.mail.ru/api/v1/user/signup'

    result = session.post(php, files=form, headers=headers, verify=False, proxies=proxies) #это запрос через Fiddler
    #result = session.post(php, files=form, headers=headers) #это запрос напрямую
    
    print (result.text)
    # через python всегда выдает ошибку:
    # {"body":{"email1":{"value":null,"error":"required"}},"email2":null,"status":400,"htmlencoded":false}

while True:
    check()
    break
  • Вопрос задан
  • 347 просмотров
Подписаться 1 Простой 10 комментариев
Пригласить эксперта
Ответы на вопрос 2
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
Различие в Headers
Ответ написан
lxstvayne
@lxstvayne
Люблю Python
Попробуй через postman, там вроде можно сразу конвертнуть в питонячий код.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы