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

Python requests带auth参数请求受保护视频资源返回404/401错误如何解决

解决方案

核心问题原因

  1. 你初始请求使用的是http协议的URL,目标服务器实际跑在https的443端口,请求会触发跨协议跳转。requests默认不会把认证信息(Authorization头)传递给跳转后的跨协议地址,导致认证失效,第一版代码因此返回404/401错误。
  2. 第二版代码完全没有携带认证参数,自然会返回401未授权错误。

修复后的代码实现

import requests
from requests.auth import HTTPBasicAuth
import os
from urllib.parse import urlparse

# 直接使用HTTPS协议的URL,避免跨协议跳转丢失认证
url = video_links[0].replace('http://', 'https://')
username = "替换为你的用户名"
password = "替换为你的密码"

# 用真实浏览器的UA避免被服务器拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

with requests.Session() as s:
    # 全局设置Session的认证信息和请求头,所有请求自动携带
    s.auth = HTTPBasicAuth(username, password)
    s.headers.update(headers)
    
    # 开启流式下载适配大体积视频文件,允许自动跳转
    resp = s.get(url, allow_redirects=True, stream=True)
    
    if resp.status_code == 200:
        filename = os.path.basename(urlparse(url).path)
        with open(filename, 'wb') as f:
            for chunk in resp.iter_content(chunk_size=1024*1024): # 每次读写1MB
                if chunk:
                    f.write(chunk)
        print(f"文件下载完成:{filename}")
    else:
        print(f"请求失败,状态码:{resp.status_code},返回内容:{resp.text}")

异常排查

如果运行上述代码仍返回401错误,说明服务器使用的是Digest认证而非Basic认证,只需要将代码中的HTTPBasicAuth替换为HTTPDigestAuth即可。

内容的提问来源于stack exchange,提问作者Invoker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:18:02