如何解决Flask部署时requests.exceptions.ConnectionError连接报错
10061连接拒绝报错修复方案
原报错信息:
ConnectionError(e, request=request)
requests.exceptions.ConnectionError:
HTTPConnectionPool(host='127.0.0.1', port=5000): Max retries exceeded
with url: /preprocessing (Caused by
NewConnectionError('<urllib3.connection.HTTPConnection object at
0x000002D405DBC0D0>: Failed to establish a new connection: [WinError
10061] No connection could be made because the target machine actively
refused it'))
该报错核心是请求端无法和127.0.0.1:5000上运行的Flask服务建立TCP连接,可按以下步骤逐一排查修复:
- 优先确认Flask服务已正常启动:需要先开启独立终端运行Flask后端代码,不能仅执行当前这段发起POST请求的代码。Flask启动后查看控制台输出的监听地址,若默认监听地址不是
127.0.0.1:5000,需要把请求代码里的url修改为实际的监听地址。 - 检查5000端口占用情况:Windows系统下打开cmd执行
netstat -ano | findstr "5000",如果5000端口已经被其他进程占用,可在Flask启动时指定其他端口,比如app.run(port=5001),同时同步修改请求代码中的url端口为5001。 - 检查本地防火墙配置:Windows系统自带防火墙可能会拦截5000端口的本地环回通信,可临时关闭防火墙验证是否是拦截导致的问题,验证通过后可在防火墙规则中放行5000端口的TCP通信。
- 确认Flask路由配置正确:排查Flask代码中是否存在
/preprocessing路由,且该路由配置了允许POST请求方法,避免连通后出现404/405错误。 - 可选客户端优化:添加请求超时和重试逻辑,避免Flask服务启动慢导致的偶发请求失败,修改后的代码如下:
import os import requests import pandas as pd from pathlib import Path from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry base_dir = Path(__file__).resolve().parent.parent data_dir = os.path.join(base_dir, 'dataset', 'diabetes_dataset.csv') output_dir = os.path.join(base_dir, 'output') datafile = pd.read_csv(data_dir) column_label = 'Outcome' cols = list(datafile.columns[:-1]) variable_name = 'Outcome' # 配置重试规则 session = requests.Session() retry = Retry(total=3, backoff_factor=1) session.mount('http://', HTTPAdapter(max_retries=retry)) response = session.post( url= 'http://127.0.0.1:5000/preprocessing', json= { "data_dir": os.path.join(base_dir, 'dataset', 'diabetes_dataset.csv'), "label": column_label, "cols": cols, "variable_name": variable_name, "output_dir": output_dir }, timeout=10 ) print(response.text)
内容的提问来源于stack exchange,提问作者Amanda
相关产品推荐
相关产品推荐

