По какой-то причине я не могу получить содержимое этой конкретной веб-страницы через cURL. Мне удалось использовать cURL, чтобы получить содержимое «верхнего уровня», но такая же встроенная функция быстрой cURL не работает для одной из связанных с суб-страниц.
Страница верхнего уровня: http://www.deindeal.ch/
Подстраница: http://www.deindeal.ch/deals/hotel-cristal-in-nuernberg-30/
Моя функция cURL (в functions.php)
function curl_get($url) { $ch = curl_init(); $header = array( 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Accept-Language: en-us;q=0.8,en;q=0.6' ); $options = array( CURLOPT_URL => $url, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13', CURLOPT_HTTPHEADER => $header ); curl_setopt_array($ch, $options); $return = curl_exec($ch); curl_close($ch); return $return; }
PHP-файл для получения содержимого (с использованием эха для тестирования)
require "functions.php"; require "phpQuery.php"; echo curl_get('http://www.deindeal.ch/deals/hotel-walliserhof-zermatt-2-naechte-30/');
До сих пор я пытался сделать следующее, чтобы это работало
curl_get()
содержит все параметры как текущие, кроме CURLOPT_USERAGENT and
CURLOPT_HTTPHEADERS`. Возможно ли, чтобы веб-сайт полностью блокировал запросы через cURL или другие механизмы удаленного открытия файлов, независимо от того, сколько данных было предоставлено для попытки сделать настоящий запрос браузера?
Кроме того, можно ли диагностировать, почему мои запросы не возникают ни с чем?
Любая помощь, отвечающая на вышеупомянутые два вопроса, или редактирование / внесение предложений, чтобы получить содержимое файла, даже если с помощью метода, отличного от cURL, будет очень признателен;).
Попробуйте добавить:
CURLOPT_FOLLOWLOCATION => TRUE
к вашим вариантам.
Если вы запускаете простой запрос на завивание из командной строки (включая -i
для просмотра заголовков ответов), то довольно легко увидеть:
$ curl -i 'http://www.deindeal.ch/deals/hotel-cristal-in-nuernberg-30/' HTTP/1.1 302 FOUND Date: Fri, 30 Dec 2011 02:42:54 GMT Server: Apache/2.2.16 (Debian) Vary: Accept-Language,Cookie,Accept-Encoding Content-Language: de Set-Cookie: csrftoken=d127d2de73fb3bd72e8986daeca86711; Domain=www.deindeal.ch; Max-Age=31449600; Path=/ Set-Cookie: generic_cookie=1; Path=/ Set-Cookie: sessionid=987b1a11224ecd0e009175470cf7317b; expires=Fri, 27-Jan-2012 02:42:54 GMT; Max-Age=2419200; Path=/ Location: http://www.deindeal.ch/welcome/?deal_slug=hotel-cristal-in-nuernberg-30 Content-Length: 0 Connection: close Content-Type: text/html; charset=utf-8
Как вы можете видеть, он возвращает 302 с заголовком Location. Если вы ударите это местоположение напрямую, вы получите контент, который ищете.
И ответить на два вопроса:
РЕДАКТИРОВАТЬ
Ах, я понимаю, о чем вы сейчас говорите. Итак, когда вы переходите к этой ссылке в первый раз, вы перенаправляетесь, а cookie (или файлы cookie) устанавливаются. Когда у вас есть эти файлы cookie, ваш запрос проходит по назначению.
Итак, вам нужно использовать cookiejar, как в этом примере: http://icfun.blogspot.com/2009/04/php-how-to-use-cookie-jar-with-curl.html
Таким образом, вам нужно будет сделать первоначальный запрос, сохранить файлы cookie и выполнить последующие запросы, включая файлы cookie.