每次我在使用套接字阅读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;
}
答案 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
,您需要创建套接字。