Гарантированный способ правильно получить содержимое www.bing.com/ - PullRequest
2 голосов
/ 10 января 2012

Я работал над программой, которая получает содержимое www.bing.com и сохраняет его в файл, но из двух способов я попробовал один, используя сокеты, а другой, использующий HtmlUnit, тоже не показывает содержимое. % правильно, когда я открываю файл. Я знаю, что есть и другие варианты, но я искал тот, который гарантированно правильно получит содержимое www.bing.com/. Поэтому я был бы признателен, если бы кто-то мог указать мне на способ достижения этого.

Ответы [ 3 ]

4 голосов
/ 10 января 2012

Различия, которые вы видите, скорее всего, связаны с тем, что веб-сервер предоставляет разный контент различным браузерам на основе строки пользовательского агента и других заголовков запросов.

Попробуйте установить заголовок User-Agent в ваших сокетах и ​​стратегии HtmlUnit для того, с которым вы сравниваете, и посмотрите, будет ли результат ожидаемым. Более того, вам, вероятно, придется копировать заголовки запросов в точности так, как они отправляются вашим целевым браузером.

0 голосов
/ 10 января 2012

Вы можете использовать URL.openConnection() для создания URLConnection и вызова URLConnection.getInputStream(). Вы можете прочитать содержимое InputStream и записать его в файл.

Если вам нужно переопределить User-Agent, потому что сервер использует его для обслуживания другого контента, вы можете сделать это, предварительно установив системное свойство http.agent для пустой строки.

/* Somewhere in your code before you make requests */
System.setProperty("http.agent", ""); 

или с помощью -Dhttp.agent= в командной строке Java

и затем установка User-Agent на что-то полезное в соединении, прежде чем вы получите InputStream.

URLConnection conn = ... //Create your URL connection as described above.
String userAgent = ... //Some user-agent string here.
conn.setRequestProperty("User-Agent", userAgent);
0 голосов
/ 10 января 2012

Что "неверно" в том, что возвращаетсяИмейте в виду, Bing, вероятно, генерирует часть контента через JavaScript;ваш клиент должен будет сделать дополнительные запросы для получения файлов JavaScript, запуска JavaScript и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...