为何仅通过网页按钮点击可访问目标链接?Python Requests问题咨询
为啥直接点下载链接不行,只有页面按钮点击才有效?
主要限制原因
- 来源页校验(Referer头):网站服务器会检查请求的
Referer头,只有请求是从对应的剧集来源页发起的,才会生成并跳转到真实下载链接。直接粘贴下载链接时,浏览器或requests请求的Referer头要么为空,要么不是指定的来源页,服务器就会重定向回来源页。 - 会话/防跨站请求伪造(CSRF)验证:网站加载来源页时,会生成会话令牌或CSRF令牌,藏在页面的表单或按钮相关隐藏字段中。点击按钮时,浏览器会自动携带这些令牌信息给服务器,验证通过后才会放行跳转。直接访问下载链接时,没有携带这些必要令牌,服务器拒绝生成真实链接。
- 动态链接生成:那个
/download链接并非直接指向目标地址,而是一个中间接口。只有当请求满足服务器的验证条件(比如来自合法来源、携带会话信息)时,服务器才会动态生成真实下载链接并执行重定向。
你的代码存在的问题
- 变量名错误:函数参数是
url,但代码里用了未定义的dUrl,会直接触发报错。 - 请求头配置错误:缺少浏览器正常访问所需的
Referer和User-Agent字段,服务器容易识别出这是爬虫请求;同时Authorization和Content-Type: application/json对于这个GET请求完全多余,反而可能被判定为非法请求。
代码修复思路
先请求来源页获取会话Cookie和必要验证信息,再携带这些信息发起下载请求:
import requests def gen_link(source_url): # 创建会话对象,自动保存和携带Cookie session = requests.Session() # 模拟浏览器的请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } # 先访问来源页,建立合法会话 session.get(source_url, headers=headers) # 拼接下载链接 download_url = f"{source_url}/download" # 发送下载请求,携带Referer和会话Cookie resp = session.get(download_url, headers={**headers, 'Referer': source_url}, allow_redirects=True) print("最终真实下载URL:", resp.url) # 调用示例 source_page = "https://www.thenetnaija.net/videos/kdrama/16426-alchemy-of-souls/season-1/episode-7" gen_link(source_page)
提示:这类网站的反爬规则可能会随时更新,如果上述方法失效,可能需要进一步分析页面的JavaScript逻辑,确认是否有额外需要生成的验证参数。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

