从客户端计算机检查 URL 的可访问性时出现代理问题

Proxy Issue while checking accessibility of URLs from client machine

我正在开发一个应用程序,我必须在 java(Spring 启动)中编写一个逻辑来检查某些 URL 是否像“www.google.ca”和“https:/ /10.23.333.43:8988/abc'(公司内部 url)等可以从各种 Windows 机器访问。 Java (Spring Boot) 代码需要托管在 RHEL Unix 机器上。意味着托管代码的 RHEL Unix 机器是服务器,一些 Windows 机器是需要测试 URL 可访问性的客户端机器。 Unix 机器以及 Windows 机器都在代理后面连接到互联网。我知道 Unix 机器上的代理值,但不知道 Windows 机器上的代理详细信息。

首先,我尝试了以下代码,其中我首先尝试获取代理,然后将代理设置为系统属性,然后执行代码以检查来自客户端计算机的 URL 的可访问性。

// 在执行代码之前获取代理详细信息并设置系统代理以检查来自客户端计算机的 URL 的可访问性

  System.setProperty("java.net.useSystemProxies", "true");

  List<Proxy> l = ProxySelector.getDefault().select(new URI("https://www.google.ca/"));             

  for (Iterator<Proxy> iter = l.iterator(); iter.hasNext();) {

     Proxy proxy = iter.next();

     logger.debug("proxy type : " + proxy.type());

     InetSocketAddress addr = (InetSocketAddress) proxy.address();                 

     if (addr == null) {

        logger.debug("No Proxy");

     } else {

        logger.debug("proxy hostname : " + addr.getHostName());

        proxyMap.put(Constants.PROXY_KEY, addr.getHostName());

        logger.debug("proxy port : " + addr.getPort());

        proxyMap.put(Constants.PORT_KEY, addr.getPort()+"");

     }

  }

// 检查客户端机器 URL 可访问性的代码

URL  url = new URL(tempUrl);                                   

HttpURLConnection  http = (HttpURLConnection) url.openConnection();

Integer statusCode = http.getResponseCode(); 

但是当我在 unix box 上部署代码然后从测试 Windows 机器上测试它时,我遇到了上面代码的一些问题。

问题 1:我看到上面的代码只会告诉我所需 URL 在 Unix 机器上的可访问性,因为它不涉及来自客户端机器的任何输入,例如 IP。

问题 2:我无法获取客户端机器的代理详细信息(它说代理类型是 DIRECT)。然而,用于代理获取的相同代码在我的 windows 开发机器上工作,其中客户端和服务器是同一台机器。

然后我在互联网上查看了其他一些解决方案,我尝试使用客户端计算机的 IP 地址检查 URL 的可访问性。我尝试了以下代码(代理代码保持不变)。

HttpGet httpget = new HttpGet("https://www.google.ca/");

httpget.setConfig(requestConfig);

logger.debug("executing request-> " + httpget.getRequestLine());

我在使用上面的代码时遇到了以下问题。

问题 1:在处理对 /10.61.241.79->{s}->https://www.google.ca:443 的请求时捕获了 I/O 异常 (java.net.BindException):无法分配请求的地址(绑定失败)

问题 2:我无法获取客户端机器的代理详细信息(它说代理类型是 DIRECT)。然而,用于代理获取的相同代码在我的 windows 开发机器上工作,其中客户端和服务器是同一台机器。

请帮助我如何检查客户端 Windows 机器对 URL 的可访问性。

编辑 1:我通过将代码移动到 UI (HTML) 层解决了我的问题,并在 java 脚本中写下了 运行 上的逻辑客户端浏览器。通过这种方式,我可以点击可访问性的 URL。我的建议是 运行 可访问性代码始终在客户端而不是服务层。

如果您尝试检查 URL 的可达性,那么您应该尝试使用 XMLHttpRequest 对象,然后使用 Jquery 中 Ajax 的 GET 方法。这样你可能不需要代理,因为代码将 运行 在客户端。