2014-09-14 2 views
-1

Почему командаРаботает ли cURL на некоторых сайтах?

$ локон www.facebook.com

не работает, в то время как команда

$ свернуться www.example.com

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

ответ

1

Когда у вас проблемы с завивкой, первое, что нужно попробовать, это вариант --verbose или его немного менее многословный кузен --include.

$ curl --include www.facebook.com 
HTTP/1.1 302 forced.302 
Location: https://www.facebook.com/ 
Content-Type: text/html; charset=utf-8 
X-FB-Debug: xJrxsrLiOuMwGBUSyUyXURhBdIcj/ZegnfeIReFcNxrtuMNv0+JivRudlLO4XIzq/Dy1CGgC14DUhCkrXUT3Rw== 
Date: Sun, 14 Sep 2014 11:44:59 GMT 
Connection: keep-alive 
Content-Length: 0 

Теперь вы можете видеть, что Facebook перенаправляет вас с http://www.facebook.com/ в https://www.facebook.com/, потому что он действительно хочет, чтобы использовать шифрование. Когда вы запрашиваете новый URL-адрес, вы получаете желаемый код HTML. Вы можете сделать curl автоматически переадресации с помощью опции --location.

Это трюк для Facebook, но с другими сайтами вы можете столкнуться с другими проблемами.

Некоторые сайты не любят завиток и другие автоматизированные инструменты; они только хотят поговорить с настоящими веб-браузерами. Они могут отвечать пустыми страницами или ошибками, такими как 403 Запрещено. Если вам действительно нужно, вы можете обойти это, заменив строку user agent опцией --user-agent, но также убедитесь, что вы не заливаете сайт запросами, вставив между ними соответствующие задержки (как правило, десятки секунд).

Некоторые сайты используют технику AJAX таким образом, что, когда вы извлекаете их с помощью завитка, вы видите только скелет страницы без интересного контента, потому что вся настоящая работа выполняется в JavaScript. В этом случае вы можете либо запросить AJAX-запросы, либо воспроизвести их с помощью завитка, либо использовать безглавой браузерный движок, а не голый HTTP-клиент, зависающий.

Смежные вопросы