【问题标题】:Define source ip address using Apache HttpClient使用 Apache HttpClient 定义源 IP 地址
【发布时间】:2013-11-29 14:40:11
【问题描述】:

我正在做一个有以下需求的项目:

  • 使用源ip地址A访问远程服务器XX.YY.ZZ.WW上的http服务S
  • 使用源ip地址B访问远程服务器XX.YY.ZZ.WW上的http服务T(同上)

XX.YY.ZZ.WW 是我无法控制的主机。

我的服务器在同一个以太网接口上配置了 IP A 和 IP B。我的项目使用 Apache HttpClient。如有必要,可以更改为其他内容。

根据我的 TCP/IP 知识,这很容易。只要我拥有 IP,我应该能够将源 IP 地址更改为我想要的任何内容。但毕竟我不是直接操作IP包。而且我不知道如何使用 HttpClient 来完成。

【问题讨论】:

    标签: java http httpclient


    【解决方案1】:
    final DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpParams params = httpClient.getParams();
    params.setParameter(ConnRoutePNames.LOCAL_ADDRESS, InetAddress.getByName(IP_ADDRESS));
    

    【讨论】:

      【解决方案2】:

      你只需要告诉 HttpClient 使用哪个网络接口。您可以使用连接属性执行此操作:

      ConnRoutePNames.LOCAL_ADDRESS='ADDRESS A';
      

      查看docs 的第 2.4 节以获取完整说明。

      【讨论】:

      • 文档说“供所有默认路线规划者使用”。如何为不同的 httpclient 实例使用不同的路由规划器?谢谢!
      • 您需要有 2 个不同的 HttpClient 实例,每个实例都配置有您首选的本地地址。
      • 实际上,我自己在文档中找到了答案。我不知道它实际上应该在 HttpParams 上配置。我认为这将是更复杂的事情。谢谢!
      • 这似乎是静态的。好吧,如果我对上面解释的每个连接都有 2 个线程怎么办?这可能会导致问题,对吧?
      猜你喜欢
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      相关资源
      最近更新 更多