我想获得我感觉幸运按钮重定向到的URL(也就是第一个结果).我传入了网址:
http://www.google.com/search?&btnI=745&pws=0&q=hello
到现在为止,到了http://www.hellomagazine.com/
问题是服务器响应代码200(OK)而不是302(重定向),所以我不知道如何执行重定向,也不知道如何获取最终的URL.
这是我一直在尝试的代码:
HttpURLConnection connection = (HttpURLConnection)wikiURL.openConnection();
connection.addRequestProperty("User-Agent", "Mozilla/4.76");
connection.setConnectTimeout(15000);
connection.setReadTimeout(15000);
connection.setInstanceFollowRedirects(false);
connection.connect();
System.out.println(connection.getResponseCode());
System.out.println(connection.getHeaderField("Location"));
这是输出:
200
null
编辑:问题似乎是网址本身.它适用于我在这里发布的那个,但不适用于这个,例如:
“http://www.google.com/search?\u0026amp;btnI=745\u0026amp;pws=0\u0026amp;q=+futebolista + wikipedia Marcio Gabriel,Atlético-GO”
解决方法:
如果我运行你的代码,我得到这个输出:
302
http://www.hellomagazine.com/
如果我订
connection.setInstanceFollowRedirects(true);
然后我可以从中读取完整的Hello网站
connection.getInputStream()
如果我将其保留为false,即不遵循重定向,则输出为:
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.hellomagazine.com/">here</A>.
</BODY></HTML>
这有点奇怪,因为你正在阅读的标题实际上并没有设定!你可以解析那个身体并在你得到302时寻找HREF,如果它仍然不适合你.
如果你仍然得到200响应,那么试试这个,让我们知道输出是什么:
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
System.out.println(sb.toString());
我还设置了Eclipse的TCP / IP监视器,以便能够确切地看到通过线路发送的内容.