在java中读取结果

时间:2013-02-26 11:30:35

标签: java sockets url https

每次我在使用套接字阅读Google搜索结果时都会在我的回复中收到此错误,每次我搜索时都会给出此错误作为响应,有时它会给我302回复,现在它给了我301,我不是我知道如何处理它,我只是想从Google获得结果,每次我被困在这里,如何解决它:

HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/search?q=java
Content-Type: text/html; charset=UTF-8
Date: Tue, 26 Feb 2013 10:57:46 GMT
Expires: Thu, 28 Mar 2013 10:57:46 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 232
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
301 Moved
The document has moved here

这是我的代码:

public String readGoogle(String keyword, int page) {
    String content = "";
    try {
        Socket s = new Socket("google.com", 80);
        PrintStream p = new PrintStream(s.getOutputStream());
        p.print("GET /search?q=" + keyword + "&start=" + page
                + " HTTP/1.1\r\n");
        p.print("User-Agent: Mozilla/4.0 "
              + "(compatible; MSIE 7.0; Windows NT 5.1)\r\n");
        p.print("Connection: close\r\n\r\n");
        InputStreamReader in = new InputStreamReader(s.getInputStream());
        BufferedReader buffer = new BufferedReader(in);
        String line;
        while ((line = buffer.readLine()) != null) {
            content += line;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return content;
}

3 个答案:

答案 0 :(得分:1)

在您的GET请求中填写完整的网址:

 //           ~~~~~~~~~~~~~~~~~~~~~
 p.print("GET http://www.google.com/search?q=" + keyword + ...
 //           ^^^^^^^^^^^^^^^^^^^^^
 //           ADD THE FULL URL HERE

也许它解决了你的问题

答案 1 :(得分:1)

A 301/302表示服务器要求您重新发出请求(重定向)。要处理此问题,请从响应中读取“Location”标头,然后向服务器提供的URL发出新的GET请求。在上面的示例中,您被重定向到“http://www.google.com/search?q=java”。

或者你可以拉下一个为你处理重定向的库,比如Apache Http Commons。他们的教程可以在这里阅读Tutorial

答案 2 :(得分:0)

www.google.com根据您的IP地址将您重定向到特定国家/地区的网站

还提供了new location,您需要创建套接字。