尝试连接到网站时 GAE 应用的未知主机异常



我正在学习如何在Java 8中使用htmlUnit进行抓取,并且我正在尝试将一个应用程序部署到Google应用程序引擎,该应用程序将每隔一段时间抓取某些网站。我正在 Eclipse 中开发应用程序,它在本地运行时按预期工作,但是部署到 GAE 后,我的应用程序不再能够连接到任何网站。

 try (final WebClient webClient = new WebClient()) {
      webClient.setCookieManager(new CookieManager() {
          protected int getPort(final java.net.URL url) {
          final int r = super.getPort(url);
          return r != -1 ? r : 80;
          }
          });  
      final HtmlPage page = webClient.getPage("https://www.google.com");
      }
  catch(Exception e){
      System.out.println(e.getMessage());         
  }

错误发生在"webClient.getPage(....(">

java.net.UnknownHostException: www.google.com

部分堆栈跟踪:

[s~permitseacherbpd/20180314t161057.408306947286449649].<stderr>: java.lang.RuntimeException: java.net.UnknownHostException: www.recreation.gov
[s~permitseacherbpd/20180314t161057.408306947286449649].<stderr>:   at com.gargoylesoftware.htmlunit.UrlFetchWebConnection.getResponse(UrlFetchWebConnection.java:162)
[s~permitseacherbpd/20180314t161057.408306947286449649].<stderr>:   at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1394)
[s~permitseacherbpd/20180314t161057.408306947286449649].<stderr>:   at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1312)
[s~permitseacherbpd/20180314t161057.408306947286449649].<stderr>:   at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:396)
[s~permitseacherbpd/20180314t161057.408306947286449649].<stderr>:   at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:317)
[s~permitseacherbpd/20180314t161057.408306947286449649].<stderr>:   at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:465)
[s~permitseacherbpd/20180314t161057.408306947286449649].<stderr>:   at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:450)
[s~permitseacherbpd/20180314t161057.408306947286449649].<stderr>:   at pack.HelloAppEngine.doGet(HelloAppEngine.java:49)
[s~permitseacherbpd/20180314t161057.408306947286449649].<stderr>:   at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)

此错误发生在我尝试访问的任何网站上,并且不是htmlUnit独有的,因为我之前在其他项目中遇到过此错误。为什么部署到应用引擎后无法连接?

我的小测试servlet也开始抛出类似的UnknownHostException。 我遇到了#63916008,它链接到<url-stream-handler>文档,该文档(强调我的(

对于 Java 8 运行时,

缺省值为本机,这意味着标准 Java 网络类使用标准 Java HTTP(S( 传输,如 Java 8 运行时与 Java 7 行为中所述。此设置要求应用启用计费,否则请求将导致以下运行时错误:

java.net.UnknownHostException
java.net.SocketTimeoutException
java.io.IOException

配置您的appengine-web.xml以使用urlfetch,您的问题应该得到解决!

相关内容

最新更新