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

解决原正常运行的UniProt ID映射Python代码出现的HTTP Error 405问题

解决Uniprot接口HTTP Error 405: Not Allowed问题

这个405错误说明Uniprot的uploadlists接口现在不接受你当前使用的POST请求方式,或者你的请求缺少必要的标识被服务器拦截了。下面给你两个可行的修复方案:

方案1:改用GET请求方式

Uniprot的上传列表接口支持通过GET请求传递参数,把参数直接拼接到URL后即可,这种方式更符合公共API的常规使用习惯,也能避开POST请求的限制。修改后的代码如下:

import urllib.request
import urllib.parse

uniprot = 'A0A0M3KKX3'
url = 'https://www.uniprot.org/uploadlists/'
params = {
    'from': 'ACC',
    'to': 'PDB_ID',
    'format': 'tab',
    'query': uniprot,
    'species': 'human'
}

# 将参数编码后拼接到URL末尾
full_url = f"{url}?{urllib.parse.urlencode(params)}"

# 发送GET请求并读取响应
with urllib.request.urlopen(full_url) as f:
    response = f.read().decode('utf-8')  # 解码为字符串方便后续处理
print(response)

方案2:保留POST请求但添加User-Agent头

如果必须使用POST请求,问题很可能出在默认的请求头没有标识,被Uniprot的反爬虫机制拦截了。给请求添加一个模拟浏览器的User-Agent即可:

import urllib.request
import urllib.parse

uniprot = 'A0A0M3KKX3'
url = 'https://www.uniprot.org/uploadlists/'
params = {
    'from': 'ACC',
    'to': 'PDB_ID',
    'format': 'tab',
    'query': uniprot,
    'species': 'human'
}

dat = urllib.parse.urlencode(params).encode('utf-8')
req = urllib.request.Request(url, dat)
# 添加模拟浏览器的User-Agent请求头
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36')

with urllib.request.urlopen(req) as f:
    response = f.read().decode('utf-8')
print(response)

问题根源说明

Uniprot大概率最近更新了API的访问策略:要么限制了POST请求的使用场景,要么加强了反爬虫规则,拒绝无合理标识的请求。这类公共API会定期调整规则来控制流量或防止滥用,之前稳定的代码突然报错就是这个原因。

建议优先选择方案1,GET请求更直观且不易触发访问限制。如果后续仍有问题,可以参考Uniprot官方文档确认最新的接口规范。

内容的提问来源于stack exchange,提问作者Christian de Frondeville

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:17:43