java - 跟随 google "I' m feeling lucky"使用 httpURLConnection 重定向

标签 java redirect httpurlconnection

我想获取我感觉很幸运按钮重定向到的 URL(也称为第一个结果)。我传入 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

编辑:问题似乎是 url 本身。它适用于我在这里发布的那个,但不适用于这个,例如:

“http://www.google.com/search?&btnI=745&pws=0&q=%2Bfutebolista+%2Bwikipedia+Marcio+Gabriel,+Atlético-GO”

最佳答案

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

302
http://www.hellomagazine.com/

如果我设置

connection.setInstanceFollowRedirects(true);

然后我可以从

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>

这有点奇怪,因为您正在阅读的 header 实际上并未设置!不过,您可以解析该正文并在收到 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 监视器,这样我就可以准确地看到通过网络发送的内容。

关于java - 跟随 google "I' m feeling lucky"使用 httpURLConnection 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6863877/

相关文章:

Android HttpURLConnection 抛出 EOFException

java - 我如何一次获取两个 jTextField 的文本?

java - 在 Java 中用字符串替换 XML 文档中的元素

regex - 使用 .htaccess 文件删除 .php 文件扩展名

ruby-on-rails - Rails 根据用户类型重定向

java - 如何在 Java 中执行 HTTP GET?

java - 是否有一个库可以使服务器请求(GET/POST)变得轻松?

java - java中单线程死锁

java - Lucene:单个术语中的多个单词

ruby-on-rails - 为什么当 rails redirect_to 成功调用新的 url 时浏览器的地址没有改变?