影刀RPA新手教程:网络连接报错完全指南——请求失败、连接拒绝、DNS解析失败

发布时间:2026/7/2 21:47:38

影刀RPA新手教程:网络连接报错完全指南——请求失败、连接拒绝、DNS解析失败 影刀RPA新手教程网络连接报错完全指南——请求失败、连接拒绝、DNS解析失败一个HTTP请求偶尔失败的流程做RPA的第三个月我开始接触API调用。流程是定时从第三方数据平台调接口拿到最新的行业数据写入数据库。听起来不复杂一个HTTP请求解析JSON入库。实际运行时10次请求里总有1到2次失败。报错ConnectionError、RequestException、timeout每次报的还不一样。我抓狂了——同样的代码为什么有时候成功有时候失败直到我发现网络请求就像坐公交不是每次都能准时到的。这篇文章用一个API调用频繁失败的案例帮你搞清楚所有网络报错。案例主线第三方API调用——10次里失败2次流程结构构造HTTP请求GET方法带API Key的Header发送请求到数据平台接口解析返回的JSON数据遍历数据列表逐条写入数据库第2步在第3次和第7次循环时报错。错误信息分别是“ConnectionError: Connection refused和ReadTimeout”。网络报错类型图谱网络报错分四大类每类的原因和处理方式完全不同。连接拒绝Connection Refused服务器收到了你的请求但它拒绝接受。就像你敲了门里面的人说不让你进。常见原因端口不对、服务器挂了、防火墙拦截。店群矩阵自动化突破运营极限DNS解析失败DNS Resolution Failed电脑找不到网址对应的服务器IP。就像你要去某某大厦但不知道它在哪条街。常见原因域名拼错了、DNS服务器挂了。连接超时Connection Timeout发了请求服务器没回应。就像电话打过去没人接。常见原因服务器响应太慢、网络不通。读取超时Read Timeout连接上了但等数据回来时太久。就像电话通了但对方半天不说话。常见原因服务器在处理你的请求但太慢。原因一服务器偶尔拒绝连接我的那个案例中有两次是ConnectionError。API文档没说有频率限制但实际服务端可能有限流。短时间内连续发请求服务端以为是在攻击它就拒绝了一些请求。解决方法请求间加随机延迟。在每次HTTP请求后等待一段随机时间。importtimeimportrandomforitemindata_list:responserequests.get(url,headersheaders)# 处理后...# 随机等待1到3秒delayrandom.uniform(1,3)time.sleep(delay)在影刀里循环处理每条数据HTTP请求获取数据等待随机时间用Python代码块生成随机数再用影刀的等待指令为什么是随机延迟而不是固定延迟因为固定延迟还是会让服务端探测到机器人模式。用random.uniform(1, 3)每次等待1到3秒之间的任意值更像人工操作。原因二DNS解析偶尔失败有时候公司的DNS服务器不稳定域名解析会偶尔失败。表现是报错信息里有Name or service not known或getaddrinfo failed。解决方法一换DNS服务器。在流程运行的电脑上把DNS改成公共DNS114.114.114.114或223.5.5.5。解决方法二缓存IP地址。在请求前先解析一下看能不能通importsockettry:ipsocket.gethostbyname(api.example.com)# 解析成功可以直接用IPexceptsocket.gaierror:# 解析失败记录日志跳过或重试pass解决方法三用IP地址替代域名。如果你知道服务器的固定IP直接用IP发请求。但这要求服务器IP是固定的且最好得到对方允许。原因三读取超时我的另一个报错是ReadTimeout。说明连接上了服务器也在处理但处理太慢超过了超时时间。解决方法分页请求。原本一次请求返回500条数据服务端处理慢。改成每次请求返回50条减少了服务端处理时间。在影刀里设置变量page为1循环构造URLhttps://api.example.com/data?page{page}size50发送HTTP请求如果返回数据为空 - 退出循环temu店群自动化报活动案例page加1 等待2秒同时增加HTTP请求指令的超时设置在指令属性中连接超时15秒默认一般是10秒读取超时60秒默认一般是30秒万能重试机制我后来给所有HTTP请求加上统一的重试逻辑。在Python代码块里这样写importrequestsimporttimedefrequest_with_retry(url,headers,max_retries3):forattemptinrange(max_retries):try:responserequests.get(url,headersheaders,timeout(10,60)# (连接超时10秒, 读取超时60秒))response.raise_for_status()returnresponse.json()exceptrequests.ConnectionErrorase:print(f连接错误第{attempt1}次尝试:{e})ifattemptmax_retries-1:raisetime.sleep(5*(attempt1))# 递增等待5秒、10秒、15秒exceptrequests.ReadTimeoutase:print(f读取超时第{attempt1}次尝试:{e})ifattemptmax_retries-1:raisetime.sleep(10)exceptrequests.HTTPErrorase:response_codee.response.status_code# 4xx客户端错误通常重试没用比如401未授权if400response_code500:raise# 不重试直接抛出# 5xx服务端错误可以重试print(f服务端错误第{attempt1}次尝试:{response_code})ifattemptmax_retries-1:raisetime.sleep(10*(attempt1))这段代码的关键设计连接错误指数退避重试5秒、10秒、15秒读取超时固定间隔重试4xx错误不重试重试也没用5xx错误重试服务器可能临时故障检查本机网络环境有时候不是服务端的问题是你自己电脑的网络问题。在流程开始前加一步网络环境检查importsocketimportrequests# 检查1能否解析域名try:socket.gethostbyname(www.baidu.com)print(DNS解析正常)except:print(DNS解析失败请检查网络)# 检查2能否访问目标网站try:responserequests.get(https://your-target-site.com,timeout10)print(f目标网站可访问状态码{response.status_code})except:print(目标网站无法访问)这个检查子流程放在所有流程开头一开始就告诉你网络状态。代理和VPN的影响如果你使用VPN或公司代理HTTP请求会经过代理服务器。代理服务器不稳定会导致请求失败。解决方法在请求中明确指定代理或不用代理。# 不使用代理proxies{http:None,https:None}sessionrequests.Session()session.proxies.update(proxies)或者在影刀的HTTP请求指令中查看是否有使用系统代理的选项根据需要勾选或取消。网络报错速查表报错关键词可能原因第一步排查解决方法Connection Refused端口错/服务器没开检查URL和端口修正请求地址DNS Resolution Failed域名无法解析ping域名看通不通换DNS或用IPConnection Timeout网络不通看能不能上网检查网络/代理Read Timeout服务器处理太慢增大超时时间分页/增量请求SSL Error证书问题看是不是https更新证书或忽略验证RPA的网络请求稳定性直接决定了流程的可靠性。更多系统联调和运维经验我在 home.linyan.cloud 上持续更新。#影刀RPA #RPA教程 #HTTP请求 #网络报错 #重试机制 #Python #API调用 #连接超时 #DNS #代理作者林焱

相关新闻