我正在编写一个小型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;
}
}
Run Code Online (Sandbox Code Playgroud)
而错误:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403 for URL: https://www.google.com/search?q=test
at …Run Code Online (Sandbox Code Playgroud) 我正在尝试解析facebook的首页,JSoup但我总是得到移动设备的HTML代码而不是普通浏览器的版本(在我的情况下是Firefox 5.0).
我正在设置我的用户代理:
doc = Jsoup.connect(url)
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0")
.get();
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?
编辑:
我刚刚解析了http://whatsmyuseragent.com/,看起来用户代理正在运行.现在,为什么网站http://www.facebook.com/在使用JSoup和我的浏览器时会返回不同的版本,这让我更加困惑.两者都使用相同的用户....
我现在也注意到了其他一些网站上的这种行为.如果你能向我解释问题是什么,我会非常高兴.
我试图解析任何给定页面的HTML转储.我使用HTML Parser并尝试使用JSoup进行解析.
我在Jsoup中找到了有用的函数,但是在调用时遇到403错误 Document doc = Jsoup.connect(url).get();
我尝试了HTTPClient,以获得html转储,并且它在同一个网址上获得了成功.
为什么JSoup为同一个URL提供403,它提供来自公共http客户端的内容?难道我做错了什么?有什么想法吗?