谷歌“我感觉很幸运”与httpURLConnection重定向

时间:2011-07-28 18:30:10

标签: java redirect httpurlconnection

我想获得我感觉幸运按钮重定向到的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?&btnI=745&pws=0&q=%2Bfutebolista+%2Bwikipedia+Marcio+Gabriel,+Atlético-GO”

3 个答案:

答案 0 :(得分:2)

如果我运行你的代码,我得到这个输出:

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监视器,以便能够准确地看到通过网络发送的内容。

答案 1 :(得分:1)

connection.setInstanceFollowRedirects(true);

是你的问题。你希望这是假的,因为你不想自动跟踪重定向;您想要检索重定向的通知。

答案 2 :(得分:0)

问题是编码,不得不强制使用UTF-8。我向我展示了200个代码,因为在搜索没有正确编码的拉丁字符时没有找到结果