Android 上的 Jsoup userAgent - 这是什么意思?

Jsoup userAgent on Android - What does it mean?

我正在 Android 中使用 Jsoup 进行一些 HTML 解析,我遇到了一些奇怪的东西(对我来说)。有些网站使用简单的 Jsoup.connect(String).get() 方法就可以正常工作。

但在其他一些网站上,我总是得到一个EOFException。所以我搜索并解决了 userAgent 属性 ,当我使用 Jsoup.connect(String).userAgent("Mozilla").get() 时它工作得很好。

现在 "mozilla" 到底是什么意思?我的应用只能在安装了 Mozilla 的设备上运行吗?

每次您的网络浏览器打开网页时,它都会为该页面发送 "request"。该请求的一部分包括一系列 "headers"。假设您使用 Firefox 打开 google 那么类似这样的内容将被发送到 google

Host    www.google.com
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101   Firefox/45.0
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language de,en-US;q=0.7,en;q=0.3
Accept-Encoding gzip, deflate

..... HTML return 中的响应针对桌面/爬虫进行了优化,或者通常针对您正在使用的浏览器(用户代理)进行了优化。有时它与发送回移动代理 (Android) 的 html 响应完全不同。移动版本可能没有任何与您的 Jsoup 选择器匹配的内容。因此,使用 userAgent("Mozilla").get() 表示您希望获得与使用桌面浏览器打开 google.com 时看到的应用程序相同的响应。