1

ソケットを使用して 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;
}
4

3 に答える 3

1

301/302 は、サーバーがリクエストの再発行 (リダイレクト) を求めていることを意味します。これを処理するには、応答から「Location」ヘッダーを読み取り、サーバーから提供された URL に新しい GET 要求を発行します。上記の例では、「 http://www.google.com/search?q=java 」にリダイレクトされていました。

または、Apache Http Commons などのリダイレクトを処理するライブラリをプルダウンすることもできます。彼らのチュートリアルはここで読むことができますチュートリアル

于 2013-02-26T12:02:57.073 に答える
1

GETリクエストに完全な URL を入れてください:

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

多分それはあなたの問題を解決します

于 2013-02-26T11:54:19.487 に答える
0

www.google.comIP アドレスに基づいて国固有のサイトにリダイレクトします

も提供されておりnew location、ソケットを作成する必要があります。

于 2013-02-26T11:36:46.617 に答える