You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何仅通过网页按钮点击可访问目标链接?Python Requests问题咨询

为啥直接点下载链接不行,只有页面按钮点击才有效?

主要限制原因

  • 来源页校验(Referer头):网站服务器会检查请求的Referer头,只有请求是从对应的剧集来源页发起的,才会生成并跳转到真实下载链接。直接粘贴下载链接时,浏览器或requests请求的Referer头要么为空,要么不是指定的来源页,服务器就会重定向回来源页。
  • 会话/防跨站请求伪造(CSRF)验证:网站加载来源页时,会生成会话令牌或CSRF令牌,藏在页面的表单或按钮相关隐藏字段中。点击按钮时,浏览器会自动携带这些令牌信息给服务器,验证通过后才会放行跳转。直接访问下载链接时,没有携带这些必要令牌,服务器拒绝生成真实链接。
  • 动态链接生成:那个/download链接并非直接指向目标地址,而是一个中间接口。只有当请求满足服务器的验证条件(比如来自合法来源、携带会话信息)时,服务器才会动态生成真实下载链接并执行重定向。

你的代码存在的问题

  1. 变量名错误:函数参数是url,但代码里用了未定义的dUrl,会直接触发报错。
  2. 请求头配置错误:缺少浏览器正常访问所需的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:40:28