使用Python Requests请求Blob URL报错及获取有效URL的问题
Blob URL请求报错原因与解决方法
一、为什么会出现InvalidSchema错误?
blob:https://xxx这种格式的URL是浏览器内部生成的伪协议地址,并非标准的HTTP/HTTPS网络协议。Requests库仅支持HTTP、HTTPS这类可直接与服务器通信的协议,无法识别blob:协议,因此会抛出No connection adapters were found的错误。- 你在浏览器网络控制台看到的Blob URL请求,本质是浏览器读取本地内存中已加载的Blob数据,并没有真正向服务器发起新请求,所以用Requests直接调用这个URL完全无效。
二、如何用Python Requests获取正确的图形数据?
核心思路是找到浏览器生成Blob数据前,向服务器请求原始图形的真实接口,而不是去请求Blob URL:
- 定位真实接口
- 打开浏览器开发者工具的「网络」面板,清空现有请求记录,然后点击下载图形的按钮。
- 忽略Blob URL的请求,重点找在它之前触发的、返回图形原始数据的请求(通常是GET/POST请求,响应类型可能是
image/png、application/octet-stream等)。这个请求的URL就是你需要的真实接口地址。
- 模拟真实请求
- 复制该真实请求的请求头、参数(如果有),用Requests构造相同的请求。注意保持会话一致性,比如先访问页面获取必要的Cookie:
import requests # 初始化会话,保持Cookie一致 s = requests.Session() # 先访问目标页面,获取会话所需的Cookie s.get('https://192.168.56.108/your-target-page', verify=False) # 替换为你找到的真实图形接口URL real_graphic_url = 'https://192.168.56.108/api/real-graphic-endpoint' headers = { 'Origin': 'https://192.168.56.108', 'Referer': 'https://192.168.56.108/your-target-page', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.27' } # 发起请求并保存图形 response = s.get(real_graphic_url, headers=headers, stream=True, verify=False) with open('downloaded-graphic.png', 'wb') as f: for chunk in response.iter_content(chunk_size=1024): f.write(chunk)
- 复制该真实请求的请求头、参数(如果有),用Requests构造相同的请求。注意保持会话一致性,比如先访问页面获取必要的Cookie:
- 关键注意点
- 确保请求头中的
Referer、Origin与浏览器请求一致,避免被服务器的反爬机制拦截。 - 如果接口需要特定的请求参数(如查询参数、表单数据),要完整复制到Requests请求中。
- 确保请求头中的
内容的提问来源于stack exchange,提问作者clemdcz
相关产品推荐
相关产品推荐

