JSoup UserAgent,如何设置正确?

时间:2011-07-05 11:06:51

标签: jsoup

我正在尝试使用JSoup解析facebook的首页,但我总是获取移动设备的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();

我做错了吗?

编辑:

我刚刚解析了http://whatsmyuseragent.com/,看起来用户代理正在运行。现在让我更加困惑的是,为什么网站http://www.facebook.com/在使用JSoup和我的浏览器时会返回不同的版本。两者都使用相同的用户......

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

4 个答案:

答案 0 :(得分:46)

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

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();

答案 1 :(得分:31)

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/useragentstring.php

<强>超时

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

<强> Referer的

将引用者设置为谷歌。

关注重定向

按照重定向进入页面。

执行()而不是get()

使用execute()获取Response对象。这可以帮助您检查内容 类型和状态代码有误。

稍后您可以解析响应对象以获取文档。

答案 2 :(得分:8)

Facebook可能会在其请求中设置(然后期待)某些cookie,并认为没有任何机头/移动用户/有限浏览器/其他内容的标头。

关于handling cookies with JSoup有几个问题,但是你可能会发现使用HttpUrlConnection或Apache的HttpClient然后将结果传递给JSoup更简单。对您需要知道的所有内容的精彩撰写:Using java.net.URLConnection to fire and handle HTTP requests

调试浏览器和JSoup之间差异的一种有用方法是Chrome's network inspector。您可以一次一个地从浏览器向JSoup添加标题,直到您获得预期的行为,然后精确缩小您需要的标题。

答案 3 :(得分:1)

我遇到了403问题并且.userAgent("Mozilla")设置为我工作(所以它不需要特定于工作。