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

如何在Python中从响应头获取Location?CLI种子搜索器报错求助

解决1337x Magnet链接提取时的InvalidSchema错误

问题场景

开发CLI种子搜索器时,针对1337x来源的资源,尝试通过请求跳转链接提取Magnet地址,运行代码时触发requests.exceptions.InvalidSchema错误。

原代码片段:

if "1337x" in data[x]['source']:
    re = requests.get(f"https://{site}/{data[x]['magnet']}")
    magnet = re.headers[upper('location')]
subprocess.run(["xdg-open", magnet])

错误信息:

Traceback (most recent call last):
  File "/home/l/Projects/getTorrents/./torrentcli", line 35, in <module>
    re = requests.get(f"https://{site}/{data[x]['magnet']}")
  File "/usr/lib/python3.10/site-packages/requests/api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
  File "/usr/lib/python3.10/site-packages/requests/api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 723, in send
    history = [resp for resp in gen]
  File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 723, in <listcomp>
    history = [resp for resp in gen]
  File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 266, in resolve_redirects
    resp = self.send(
  File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 695, in send
    adapter = self.get_adapter(url=request.url)
  File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 792, in get_adapter
    raise InvalidSchema(f"No connection adapters were found for {url!r}")
requests.exceptions.InvalidSchema: No connection adapters were found for 'magnet:?xt=foobar

错误原因

  1. 自动重定向触发不支持的协议:requests默认会自动跟随重定向,当请求的1337x跳转链接指向magnet:协议地址时,requests没有对应的适配器处理该协议,直接报错。
  2. 变量名冲突:使用re作为请求响应变量名,覆盖了Python内置的正则模块re,存在潜在问题。
  3. Header获取方式错误:upper('location')写法错误,应该是'location'.upper(),且HTTP响应头不区分大小写,直接用小写键更稳妥。
  4. 缺少异常处理:未处理响应中不存在Location头的情况,可能导致KeyError。

修复方案

修改代码时需要:

  • 禁用自动重定向,获取初始响应的Location头
  • 避免变量名冲突
  • 安全获取响应头
  • 增加基础异常处理

修改后的代码:

import requests
import subprocess

# 假设data、x、site已定义
if "1337x" in data[x]['source']:
    # 禁用自动重定向,避免requests尝试处理magnet协议
    resp = requests.get(f"https://{site}/{data[x]['magnet']}", allow_redirects=False)
    # 安全获取Location头,不区分大小写,默认返回None
    magnet = resp.headers.get('location')
    if magnet:
        subprocess.run(["xdg-open", magnet])
    else:
        print("无法获取Magnet链接")
else:
    # 处理非1337x来源的逻辑
    print("非1337x来源,跳过处理")

关键修改说明

  • allow_redirects=False:阻止requests自动跟随重定向,这样就能在初始响应中拿到指向magnet链接的Location头,而不会让requests尝试请求magnet协议地址。
  • resp.headers.get('location'):使用get方法获取头信息,避免KeyError,同时HTTP头不区分大小写,直接用小写即可匹配。
  • 变量名改为resp:避免覆盖内置模块re。
  • 增加判断逻辑:确保magnet变量存在时再调用xdg-open,避免传入空值导致错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:15:32