Python用requests调用ASP.NET Core API出现ConnectionError如何解决
问题排查及解决方案
核心原因定位
你遇到的报错核心是Connection refused(TCP连接被拒绝),属于网络层问题,和请求体、接口参数配置无关。提示里的Max retries exceeded是requests底层默认自动重试导致的,和你手动发起的单次请求无关,优先从以下维度排查:
1. 确认ASP.NET Core实际监听的协议与端口
这是最高发的问题:
- 新版ASP.NET Core默认会同时监听
http://localhost:5000和https://localhost:5001,但如果你修改过启动配置、或是用IIS/反向代理启动,可能仅开放了https端口 - 核对Postman调用接口时用的完整地址,如果用的是
https://localhost:5001/api/Search,将Python代码里的url改成对应地址即可,如果是本地自签名测试证书,还要加verify=False参数跳过证书校验:
# 修正后的请求写法 url = "https://localhost:5001/api/Search" # 直接用json参数,无需手动序列化和设置Content-Type头 response = requests.post(url, json=request.__dict__, verify=False)
2. 排查Python运行环境差异
如果你的Python代码运行在WSL、虚拟机、Docker容器中:
- 代码里的
localhost指向的是Python运行环境的本地,而非ASP.NET Core服务所在的宿主机 - 解决方案:将url中的
localhost替换为宿主机的局域网IP,同时将ASP.NET Core的监听地址改为0.0.0.0(修改Program.cs/Startup.cs的UseUrls配置),允许非本地请求访问。
3. 可选优化项(避免后续参数错误)
你当前的请求传参写法可以简化,requests内置了json参数支持,无需手动序列化、手动设置请求头:
原代码:
headers = {'Content-type': 'application/json', 'Accept': 'application/json'} response = requests.post(url, data=json.dumps(request.__dict__), headers=headers)
优化后:
response = requests.post(url, json=request.__dict__)
内容的提问来源于stack exchange,提问作者ChsharpNewbie
相关产品推荐
相关产品推荐

