JSoup UserAgent,如何设置它?

我试图用JSoupparsingFacebook的首页,但我总是得到移动设备的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(); 

我做错了什么?

编辑:

我刚刚parsing了http://whatsmyuseragent.com/ ,看起来像用户代理正在工作。 现在它更让我困惑,为什么网站http://www.facebook.com/使用JSoup和我的浏览器时返回一个不同的版本。 两者都使用相同的useragent ….

我现在也注意到了其他一些网站上的这种行为。 如果你能向我解释这个问题是什么,我会更高兴。

您也可以尝试设置引荐来源标头:

 doc = Jsoup.connect("https://www.facebook.com/") .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") .referrer("http://www.google.com") .get(); 
 Response response= Jsoup.connect(location) .ignoreContentType(true) .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0") .referrer("http://www.google.com") .timeout(12000) .followRedirects(true) .execute(); Document doc = response.parse(); 

用户代理

使用最新的用户代理。 这里是完整的列表http://www.useragentstring.com/pages/Firefox/

时间到

另外不要忘记添加timout,因为有时需要比正常的超时下载页面。

引荐

设置referer为谷歌。

遵循redirect

按照redirect到达页面。

execute()而不是get()

使用execute()来获取Response对象。 这可以帮助您检查内容types和状态代码,以避免错误。

稍后,您可以parsing响应对象以获取文档。

Facebook很可能会在其请求中设置(然后期待)某些cookie,并且认为这个头部缺less任何机器人/移动用户/有限的浏览器/其他东西。

关于使用JSoup处理cookie有几个问题,但是您可能会发现使用HttpUrlConnection或Apache的HttpClient然后将结果传递给JSoup会更简单。 一个你需要知道的一切优秀的写作: 使用java.net.URLConnection来触发和处理HTTP请求

Chrome的networking检查器是一种debugging浏览器和JSoup之间区别的有用方法。 您可以将浏览器中的标题一次添加到JSoup,直到获得您期望的行为,然后精确缩小所需的标题。

我有403问题,并设置.userAgent("Mozilla")为我工作(所以它不需要是超具体的工作。