Подтвердить что ты не робот

JSoup UserAgent, как правильно установить его?

Я пытаюсь разобрать главную страницу facebook с помощью JSoup, но я всегда получаю код HTML для мобильных устройств, а не версию для обычных браузеров (в моем случае Firefox 5.0).

Я устанавливаю свой User Agent следующим образом:

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 и моего браузера. Оба используют один и тот же useragent....

Я тоже заметил это поведение на некоторых других сайтах. Если бы вы могли объяснить мне, в чем проблема, я был бы более чем счастлив.

4b9b3361

Ответ 1

Вы также можете попробовать настроить заголовок реферера:

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

Ответ 2

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

Timeout

Также не забудьте добавить timout, так как иногда для загрузки страницы требуется больше обычного времени.

Referer

Установите референт как google.

Следуйте переадресации

выполните переадресацию, чтобы перейти на страницу.

выполнить() вместо get()

Используйте execute(), чтобы получить объект Response. Что может помочь вам проверить содержимое код типа и состояния, допускающий ошибку.

Позже вы можете проанализировать объект ответа, чтобы получить документ.

Ответ 3

Вероятно, что Facebook устанавливает (а затем ожидает) определенные куки файлы в своих запросах и считает заголовок, который не имеет какого-либо бота/мобильного пользователя/ограниченного браузера/что-то еще.

Есть несколько вопросов о обработке файлов cookie с помощью JSoup, однако вам может быть проще использовать HttpUrlConnection или Apache HttpClient, а затем передать результат JSoup. Отличная запись обо всем, что вам нужно знать: Использование java.net.URLConnection для запуска и обработки HTTP-запросов

Одним из полезных способов отладить разницу между вашим браузером и JSoup является инспектор сети Chrome. Вы можете добавлять заголовки из браузера в JSoup по одному, пока не получите ожидаемое поведение, а затем сузите именно те заголовки, которые вам нужны.

Ответ 4

У меня была проблема с 403, и настройка .userAgent("Mozilla") работала для меня (так что это не должно быть суперспецифичным для работы.