无法获取go_session_id Cookie致请求400错误,求解决方案代码
当前通过requests.Session()访问https://payment.mts.ru/后,获取到的Cookie中没有go_session_id参数,调用https://sso.mtsbank.ru/api/v2/login接口时返回400错误,提示请求格式错误(缺失必要参数)。
原代码
import requests, fake_useragent user = fake_useragent.UserAgent().random headers = {'user-agent': user} number = '+79614722233' sess = requests.Session() r = sess.get('https://payment.mts.ru/', headers=headers) print(r) print(sess.cookies.get_dict()) r = sess.post('https://sso.mtsbank.ru/api/v2/login', headers=headers, json={'login': number[1:]}) print(r) print(r.text)
原代码返回结果
return (<Response [200]> {'TS016bb39a': '012019f3d42797fbeffa4e2cbd9f9d87c1ca95471b9a4cee3cb32c4aabb7088b2e61e457ecdf4a6a42515b7871d4904eaef2d8c76eaa224fe90825b8edfd74caa67da8e490edf6ae95b4ef18e2db2ff4eb902a57d53af4a72c2631f9d94785f0112f9d586f382052eefbf098a255f1a98151c8bda0', '.AspNetCore.Antiforgery.q1sNu47QVQs': 'CfDJ8NxAinrLot9AhyO3UZA71zHHTSizyDYnxj0ckopYqbIjHextEQGQfbOf4lgrDa4z2u4S65qZF5yAkFtp0Woz3RN6UY-zNUYfdP1gEgPBHSlui7NU95w0Zd_PGxHZ6ENdtvB9Niuk8XUVwYL_w4EgH9w', '.AspNetCore.RegionId': 'MOW', 'StickyID': '!f3egRLHvs4AE7gopFL1Kx71Z9S8d2pjo/pE18UVcgfWfT96HpuNFY8A6uJsr1bkvJIBEMJ0Bh4fwow=='} <Response [400]> {"error":"invalid_request","error_description":"The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed","error_id":"fc6ce41836f1b2296ce26f83f4bdee7a"} )
解决方法
go_session_id是由sso.mtsbank.ru域名设置的Cookie,原代码仅访问了payment.mts.ru,未触发目标域名的Cookie生成逻辑。需要先访问sso.mtsbank.ru下的登录页面(即请求详情中的Referer地址),再发送登录请求。
修改后的代码
import requests from fake_useragent import UserAgent # 生成符合浏览器特征的User-Agent user_agent = UserAgent().random headers = { 'User-Agent': user_agent, 'Accept': '*/*', 'Accept-Language': 'ru,en;q=0.9', 'Origin': 'https://sso.mtsbank.ru', 'Referer': 'https://sso.mtsbank.ru/login/mtsmoney/auth/' } number = '+79614722233' sess = requests.Session() # 先访问SSO登录页面,获取go_session_id Cookie login_page_url = 'https://sso.mtsbank.ru/login/mtsmoney/auth/' r = sess.get(login_page_url, headers=headers) print("登录页面响应状态:", r) print("获取到的Cookie:", sess.cookies.get_dict()) # 发送登录请求 login_api_url = 'https://sso.mtsbank.ru/api/v2/login' payload = {'login': number[1:]} r = sess.post(login_api_url, headers=headers, json=payload) print("登录接口响应状态:", r) print("登录接口返回内容:", r.text)
关键说明
- 必须先访问
sso.mtsbank.ru域名下的页面,才能触发服务器设置go_session_idCookie - 补充
Origin和Referer请求头,模拟真实浏览器的请求行为,避免被反爬拦截 - 使用同一个Session实例,确保Cookie自动携带到后续请求
内容的提问来源于stack exchange,提问作者VasCer03
相关产品推荐
相关产品推荐

