Когда у вас проблемы с завивкой, первое, что нужно попробовать, это вариант --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-клиент, зависающий.