使用Python Requests无法获取目标接口有效响应,求原因及解决方法
问题描述
我尝试从链接http://www.elahmad.com/tv/watchtv.php?id=mbc_max获取特定响应字符串,以此自动获取有效的流媒体链接(该链接可通过浏览器开发者工具获取)。
在浏览器中打开上述网站并进入开发者工具后,目标响应来自接口http://www.elahmad.com/tv/watchtv.php(直接打开该接口地址无法得到数据)。我用以下Python脚本尝试请求,但始终得到输出“Oops!”:
import requests headers = { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'en-US,en;q=0.9', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Origin': 'http://www.elahmad.com/tv/watchtv.php?id=mbc_max', 'Referer': 'http://www.elahmad.com/tv/watchtv.php?id=mbc_max', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest', } data = { '9c37d4962012cec32e950d14f90021bd': 'mbc_max', } response = requests.post('http://www.elahmad.com/tv/watchtv.php',headers=headers, data = data , verify=False) print(response.text)
请问我遗漏了什么?
可能的原因及解决方法
缺少会话Cookie:浏览器访问页面时会自动获取并携带站点设置的Cookie,你的脚本没有维护会话。先发送GET请求访问目标页面,保存Cookie后再发送POST请求。可以用
requests.Session()自动管理Cookie,示例:import requests session = requests.Session() # 先访问页面获取Cookie session.get('http://www.elahmad.com/tv/watchtv.php?id=mbc_max', verify=False) headers = { # 调整Origin为根域名 'Origin': 'http://www.elahmad.com', 'Referer': 'http://www.elahmad.com/tv/watchtv.php?id=mbc_max', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'en-US,en;q=0.9', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', } # 注意:字段名可能需要从页面源码提取,这里先保留原字段做示例 data = { '9c37d4962012cec32e950d14f90021bd': 'mbc_max', } response = session.post('http://www.elahmad.com/tv/watchtv.php', headers=headers, data=data, verify=False) print(response.text)Origin头配置错误:Origin头应该是站点的根域名
http://www.elahmad.com,而不是带参数的完整页面URL,修改后再尝试请求。表单字段可能是动态生成的:你POST的字段名
9c37d4962012cec32e950d14f90021bd大概率是页面加载时动态生成的哈希值,每次会话可能都会变化。需要先爬取页面源码,用正则或HTML解析工具提取这个动态字段名,再填入POST数据中。检查是否遗漏其他请求参数:再次对照浏览器开发者工具中的请求详情,确认请求方法、表单数据的所有键值对、请求头是否完全匹配,比如是否有
Cookie之外的其他隐藏字段被遗漏。
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

