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

使用Python responses库时如何允许访问未Mock的真实接口

你可以通过 responses 库的透传(passthrough)配置实现需求,有两种常用配置方式:

方式1:允许所有未匹配Mock的请求直接访问真实网络

直接在 responses 激活装饰器中添加 allow_passthrough=True 参数即可,所有没有注册Mock规则的请求都会直接走真实网络请求:

import requests
import responses

@responses.activate(allow_passthrough=True)
def my_request():
    responses.add(responses.GET, 'http://google.com', body="Hi! Mocked :)")
    # 走Mock规则
    r1 = requests.get('http://google.com')
    # 未匹配Mock,走真实网络请求
    r2 = requests.get('http://bing.com')
    return r1, r2

r1, r2 = my_request()
print(f"Code r1: {r1.status_code}\nCode r2: {r2.status_code}")
print(f"r1 content: {r1.text}\nr2 content length: {len(r2.text)}")

正常输出示例:

Code r1: 200
Code r2: 200
r1 content: Hi! Mocked :)
r2 content length: 74123

方式2:仅允许指定域名/地址的真实请求(更安全)

如果不想放开所有真实请求权限,可以通过 responses.add_passthru() 方法仅添加需要放行的地址前缀/正则规则,其余未匹配Mock的请求依然会报错:

import requests
import responses
import re

@responses.activate
def my_request():
    responses.add(responses.GET, 'http://google.com', body="Hi! Mocked :)")
    # 仅放行bing域名的请求走真实网络,支持前缀匹配或者正则匹配
    responses.add_passthru('http://bing.com')
    # 走Mock规则
    r1 = requests.get('http://google.com')
    # 匹配透传规则,走真实网络请求
    r2 = requests.get('http://bing.com')
    return r1, r2

r1, r2 = my_request()
print(f"Code r1: {r1.status_code}\nCode r2: {r2.status_code}")

注意事项

  • add_passthru 支持前缀匹配和正则匹配,如果需要更精细的规则可以传入正则表达式,比如 responses.add_passthru(re.compile(r'https://bing.com/query.*')) 仅放行bing的查询接口
  • 注意协议匹配,如果目标地址是HTTPS,需要写对前缀的协议头,否则无法匹配透传规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 20:54:04