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

MacOS M2下Python自动化测试requests连接错误求助

解决MacOS M2上Python自动化测试的请求连接错误

问题场景

我是Python新手,在MacOS M2设备上编写自动化测试代码,运行后出现连接错误,尝试了重试和调整超时时间的方案都无效。

测试代码

def test_get_user_active_list():
    params = {'filter': '{"createdAt":{"gte":"2023-08-31T21:00:00.000Z","lte": "2023-10-31T21:00:00.000Z"}}',
              'range': '2'}
    res = get(f'user/active-list/{params}')

自定义get方法实现

def get(endpoint, params=None):
    response = requests.get(
        URL + endpoint,
        params,
        timeout=0.5
    )
    assert response.status_code == 200
    return response.json()

错误信息

raise ConnectionError(e, request=request)
E           requests.exceptions.ConnectionError: HTTPSConnectionPool(host='***', port=443): Max retries exceeded with url: /active-list/%7B'filter':%20'%7B%22createdAt%22:%7B%22gte%22:%222023-08-31T21:00:00.000Z%22,%22lte%22:%20%222023-10-31T21:00:00.000Z%22%7D%7D',%20'range':%20'2'%7D (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x106ee35d0>: Failed to resolve 'api.dev.shadow.funnel-fuel.comuser' ([Errno 8] nodename nor servname provided, or not known)"))

尝试过的无效方案

  • 方案一:添加重试机制
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

session = requests.Session()
retry = Retry(connect=3, backoff_factor=1)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)

session.get(url)
  • 方案二:调整超时时间
r = requests.get(url, timeout=3)

核心问题与解决方案

核心问题

  1. URL拼接错误:错误信息里的api.dev.shadow.funnel-fuel.comuser说明域名和路径直接连在一起,没有用斜杠分隔,导致DNS解析失败。
  2. 参数传递方式错误:把params字典直接拼接到endpoint路径中,而不是通过requests.get的params参数传递,导致路径格式完全错误。

解决方案

  1. 修正URL格式:确保全局变量URL末尾带斜杠,比如URL = "https://api.dev.shadow.funnel-fuel.com/",或者endpoint开头带斜杠,避免拼接时域名和路径连在一起。
  2. 正确传递参数:将params作为第二个参数传给自定义的get方法,而非拼接到路径中;同时把参数里的"替换为正常双引号。

修正后的测试代码:

def test_get_user_active_list():
    params = {'filter': '{"createdAt":{"gte":"2023-08-31T21:00:00.000Z","lte": "2023-10-31T21:00:00.000Z"}}',
              'range': '2'}
    res = get('user/active-list', params=params)

自定义get方法无需修改,只要保证URL格式正确即可。

为什么之前的方案无效

重试机制和超时调整都是针对连接超时或重试逻辑的优化,但你的问题根源是URL格式错误导致DNS解析失败,这些方案无法解决格式问题,因此无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:20:23