使用HTTPURLConnection在Java中进行HTTP到HTTPS重定向

4
我在我的Java代码中连接到一个特定URL的HTTP请求时遇到了问题。例如:http://www.linkedin.com。这会抛出“服务器不可用”错误(TimeOutException)。 但是,如果响应代码为301或302,则我希望我的连接重定向HTTP请求到Location标头值。
代码片段:
  HttpURLConnection urlConn =(HttpURLConnection) new URL(url).openConnection(); //For eg : http://www.linkedin.com
  urlConn.setConnectTimeout(10*1000);
  urlConn.setReadTimeout(10*1000);

  boolean redirect = false;
  int status = urlConn.getResponseCode(); //No response. Throws exception
  if (status == HttpURLConnection.HTTP_MOVED_TEMP   || status == HttpURLConnection.HTTP_MOVED_PERM) 
  {
    redirect = true;
  }

  String contenttype = urlConn.getContentType();

  if(redirect)
  {
    String newUrl = urlConn.getHeaderField("Location");//No I18N
    urlConn = (HttpURLConnection) new URL(newUrl).openConnection();
    urlConn.connect();
    contenttype = urlConn.getContentType();
  }

超时异常并不表示重定向失败,更可能是遭遇了防火墙。HttpUrlConnection会根据30x状态码自动进行重定向。在连接尝试建立时,请检查您的网络netstat -na并查找SYN_SENT状态。 - Jan
1
如果你的网络上有代理实现,尝试按照这个链接中所述,使用SSL上下文来实现它。 - redoc
1个回答

1

你的代码对我有效。显然,你面临一些网络问题。

如果http://www.linkedin.com在你的浏览器中可以使用,那么你可以检查它是否使用了某个代理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接