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

Apache HttpClient摘要认证SOAP请求出现HttpHostConnectException连接超时求助

连接超时问题排查与修复

当前出现的Connect to httpbin.org:135 failed: Connection timed out错误,本质是代码中硬编码的连接参数和实际请求目标完全不匹配,和网络环境、运行设备这些外部因素无关,具体问题点和修复方法如下:

具体错误定位

  • 硬编码的端口完全错误
    构造HttpHost时写死了连接端口为135,这个端口是Windows系统RPC服务的保留端口,httpbin.org的公网服务器根本不会在该端口开放HTTP/HTTPS服务,所有往这个端口发的连接请求都会因为无服务监听直接超时。
  • 协议配置不匹配
    你的请求地址是http://httpbin.org/digest-auth/auth/user/passwd,属于HTTP协议的80端口服务,但代码中硬编码指定连接协议为HTTPS,协议层不匹配也会直接导致连接失败。
  • 认证参数取值逻辑错误
    解析服务返回的WWW-Authenticate响应头时,取realm参数的键名写为"Digest realm"。实际响应头的结构是:第一部分是认证方案名称(也就是Digest),后面是独立的认证参数列表,realm是列表里的独立参数,对应的键名就是realm。用错误的键名取值会拿到null,直接导致后续摘要认证流程无法正常执行。
  • 凭证绑定域不匹配
    你把账号凭证绑定在了135端口对应的认证域下,和实际请求的服务域完全不匹配,就算能连上服务,认证逻辑也不会被正常触发。

修复方案

删除硬编码的端口、协议配置,直接从请求URL中自动提取连接参数,同时修正参数取值的键名:

  1. 替换原来错误的HttpHost构造逻辑:
    原错误代码:
    HttpHost target = new HttpHost(httpget.getURI().getHost(), 135, "https");
    
    修复后代码:
    URI requestUri = httpget.getURI();
    // 自动匹配请求对应的主机、端口、协议,禁止硬编码值
    HttpHost target = new HttpHost(
            requestUri.getHost(),
            requestUri.getPort(),
            requestUri.getScheme()
    );
    
  2. 修正realm参数的取值逻辑:
    原错误代码:
    digestAuth.overrideParamter("realm", wwwAuth.get("Digest realm"));
    
    修复后代码:
    digestAuth.overrideParamter("realm", wwwAuth.get("realm"));
    

额外说明

你之前尝试修改端口、更换URL、换电脑运行都没有效果,根本原因是代码里硬编码的135端口逻辑没有被改动,不管换什么运行环境,只要程序还是尝试连接httpbin.org的135端口,就必然会触发连接超时——因为那个端口根本没有对外提供可访问的测试服务。
另外,你当前代码的逻辑是基于Apache HttpClient的普通HTTP请求实现,和SOAP调用的核心协议逻辑没有关联,出现的连接超时问题完全是客户端的连接配置错误导致的,和SOAP框架、认证方式本身无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 22:15:09