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