【发布时间】:2012-11-20 04:15:37
【问题描述】:
我正在编写一个小型 Java 程序来获取给定 Google 搜索词的结果量。出于某种原因,在 Java 中我得到了 403 Forbidden,但我在 Web 浏览器中得到了正确的结果。代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
public class DataGetter {
public static void main(String[] args) throws IOException {
getResultAmount("test");
}
private static int getResultAmount(String query) throws IOException {
BufferedReader r = new BufferedReader(new InputStreamReader(new URL("https://www.google.com/search?q=" + query).openConnection()
.getInputStream()));
String line;
String src = "";
while ((line = r.readLine()) != null) {
src += line;
}
System.out.println(src);
return 1;
}
}
还有错误:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: https://www.google.com/search?q=test
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at DataGetter.getResultAmount(DataGetter.java:15)
at DataGetter.main(DataGetter.java:10)
为什么要这样做?
【问题讨论】:
-
@Perception 嗯...什么是 SSL 端点? (对不起,我对这种东西一无所知)
-
SSL(安全套接字层)是一种确保客户端和服务器之间来回传递的数据安全的方法。 SSL 端点是常规 URL,但使用 https 而不是 http。使用 SSL 比常规 http 更复杂,因为需要在客户端和服务器之间进行握手。在你的情况下这是不必要的,因为你可以使用谷歌的“普通”http端点(http;//www.google.com/search)
-
@Perception 如果我使用普通的 http:// 也会发生同样的事情
-
将您正在使用的查询也添加到问题中。