weixin_44223168 2023-09-11 10:50 采纳率: 0%
浏览 5

通过Apache的httpclient正向代理访问外网超时问题

通过Apache的httpclient正向代理访问外网超时问题?相请各位帮忙分析一下是什么问题?

访问外网路径:
一、业务服务器-->Apache正向代理服务器(8080端口)-->外网(https://test-mapi.stg.1qianbao.com/openapi
1、代码端httpclient访问抓包情况(网络人员反馈的情况):
业务服务器-->代理服务 可以抓到
代理服务器-->外网 可以抓到
业务服务器-->代理服务器-->外网 抓不到
2、代码端httpclient访问情况:
业务服务器-->代理服务器-->外网 访问超时
3、curl连接情况
业务服务器-->代理服务器-->外网 可以通

二、更换外网地址(https://api.mch.weixin.qq.com
业务服务器-->Apache正向代理服务器(8080端口)-->外网(https://api.mch.weixin.qq.com
1、代码端httpclient访问情况:
业务服务器-->代理服务器-->外网 可以访问
2、curl连接情况
业务服务器-->代理服务器-->外网 可以通

三、更换为Nginx正向代理服务器
业务服务器-->Nginx正向代理服务器-->外网(https://test-mapi.stg.1qianbao.com/openapi
1、代码端httpclient访问抓包情况:
业务服务器-->代理服务器-->外网 可以访问

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-11 12:46
    关注

    【以下回答由 GPT 生成】

    可能的原因之一是Apache HttpClient默认使用的是HTTP/1.1协议,而代理服务器可能只支持HTTP/1.0协议。HTTP/1.1协议使用了持续连接,即多个请求可以使用同一个TCP连接来传输,但代理服务器可能没有正确处理这种方式,导致超时。

    要解决这个问题,可以尝试通过配置HttpClient来使用HTTP/1.0协议。具体步骤如下:

    1. 在创建HttpClient的时候,设置连接管理器和协议版本:
    HttpClient httpClient = HttpClients.custom()
            .setConnectionManager(connManager)
            .setVersion(HttpVersion.HTTP_1_0)
            .build();
    
    1. 然后进行正常的请求操作:
    HttpGet request = new HttpGet("https://test-mapi.stg.1qianbao.com/openapi");
    CloseableHttpResponse response = httpClient.execute(request);
    

    通过设置HTTP协议版本为HTTP/1.0来避免使用持续连接,从而解决超时问题。

    另外的解决方案是尝试调整HttpClient的超时设置。在默认情况下,HttpClient使用的连接超时和读取超时时间为无限大,导致请求可能会永远阻塞。可以通过以下代码设置超时时间:

    RequestConfig requestConfig = RequestConfig.custom()
            .setSocketTimeout(5000) // 设置读取超时时间
            .setConnectTimeout(5000) // 设置连接超时时间
            .build();
    
    HttpClient httpClient = HttpClients.custom()
            .setDefaultRequestConfig(requestConfig)
            .setConnectionManager(connManager)
            .build();
    
    HttpGet request = new HttpGet("https://test-mapi.stg.1qianbao.com/openapi");
    CloseableHttpResponse response = httpClient.execute(request);
    

    以上设置了读取超时和连接超时时间为5秒,可以根据实际情况进行调整。

    希望以上解决方案能够解决您遇到的问题。如果以上方法没有解决您的问题,请提供更多的详细信息,以便我给出更准确的解决方案。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月11日

悬赏问题

  • ¥15 TeleScan不能修改bar
  • ¥100 请问我基于逐飞库写的这个有关于mp u6050传感器的函数,为什么输出的值是固定的?
  • ¥15 hadoop中启动hive报错如下怎么解决
  • ¥15 如何优化QWebEngineView 加载url的速度
  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息
  • ¥15 Spring Boot离线人脸识别
  • ¥15 使用Ant Design Pro vue的时候,使用环境变量的时候,构建报错是什么原因
  • ¥15 NRF24L01能发送但是不能接收
  • ¥15 想问一下这种情况怎么解决呢(关键词-file)