0

我正在开发 Ubuntu 12.04。这是我使用 URLConnection 实现 HTTP GET 方法的简单代码。

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

public class HttpURLConnectionExample {

private final String USER_AGENT = "Mozilla/5.0";

public static void main(String[] args) throws Exception {

    HttpURLConnectionExample http = new HttpURLConnectionExample();

    System.out.println("Testing 1 - Send Http GET request");
    http.sendGet();
}

// HTTP GET request
private void sendGet() throws Exception {

    String url = "https://www.google.com/search?q=flower";

    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();

    // optional default is GET
    con.setRequestMethod("GET");

    //add request header
    con.setRequestProperty("User-Agent", USER_AGENT);

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'GET' request to URL : " + url);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    //print result
    System.out.println(response.toString());

    }

}

但是当我从 ubuntu 终端编译并运行这段代码时,这段代码的输出并没有给出 URL 指定的页面内容。相反,它给出了以下输出

Testing 1 - Send Http GET request

Sending 'GET' request to URL : http://www.google.com/search?q=flower
Response Code : 307
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>307 Temporary Redirect</title></head><body><h1>Temporary Redirect</h1><p>The document has moved <a href="https://ifwb.iitb.ac.in/index.php?add=www.google.com/search">here</a>.</p><hr><address>Apache/2.2.22 (Fedora) Server at www.google.com Port 80</address></body></html>

这个问题适用于我在代码中指定的任何 URL。此外,我尝试使用 telnet 客户端访问 Web 内容,例如

远程登录 www.google.com 80 GET /

它不仅为 www.google.com 提供了类似的结果,而且为每个 URL 提供了类似的结果。我是 IIT Bombay 的学生,可能与https://ifwb.iitb.ac.in有关。我也想坚持 java.net 而不是 apache httpclient。所以帮我解决这个问题。

4

1 回答 1

0

由于请求不完整,您似乎被服务器拒绝了。使用像 Fiddler 或 Wireshark 这样的嗅探器来“通过示例学习”是个好主意:比较您的请求和来自特定软件(如浏览器)的请求。

下面是 Wireshark 转储的摘录,IE10 如何将 GET 请求发送到感兴趣的 URL。如您所见,有多个字段描述了客户端的功能和期望,因此被查询的服务器可以以最合适和可消费的形式返回答案。咨询谷歌/RFC,看看传入的每个参数的含义:

GET /search?q=flower HTTP/1.1

接受:文本/html,应用程序/xhtml+xml,/

接受语言:en-US

用户代理:Mozilla/5.0(兼容;MSIE 10.0;Windows NT 6.1;WOW64;Trident/6.0)

接受编码:gzip,放气

主机:www.google.com

DNT: 1

连接:保持活动

Cookie:[这里有一些私人信息]

于 2013-06-20T21:22:20.157 回答