Intereting Posts
Я правильно использую функцию crypt () PHP? Множественное наследование в PHP Включить подсказку шаблона в страницах администратора – Magento php проверить действительную дату, странные преобразования даты Прекратить отправку данных из разных доменов PHP Массивы PHP … Что означает / является значение (ы) пустой скобки? Отправка переменных с одной страницы PHP на другую Как бы я исказил изображение с помощью библиотеки GD? PHP: скрипт для генерации кроссвордов? Как получить тип содержимого файла в PHP? Вставить в таблицу с подготовленным заявлением У меня есть строка с "\ u00a0", и мне нужно заменить ее на "" str_replace не удается Как запустить PHP-скрипт каждые 5-10 минут без cron, perl и т. Д.? Невозможно перенаправить с большим количеством переменных. Заголовок может содержать не более одного заголовка, обнаружена новая строка. в Преобразование wiki-формата в XHTML

Кажется, не удается получить содержимое веб-страницы через cURL – пользовательский агент и HTTP-заголовки установлены?

По какой-то причине я не могу получить содержимое этой конкретной веб-страницы через 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/'); 

До сих пор я пытался сделать следующее, чтобы это работало

  • Удалите файл как локально (XAMPP), так и удаленно (LAMP).
  • Добавлено в пользовательский агент и HTTP-заголовки, как рекомендовано здесь file_get_contents, и CURL не может открыть конкретный веб-сайт – до того, как функция curl_get() содержит все параметры как текущие, кроме CURLOPT_USERAGENT and CURLOPT_HTTPHEADERS`.

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

Кроме того, можно ли диагностировать, почему мои запросы не возникают ни с чем?

Любая помощь, отвечающая на вышеупомянутые два вопроса, или редактирование / внесение предложений, чтобы получить содержимое файла, даже если с помощью метода, отличного от cURL, будет очень признателен;).

Solutions Collecting From Web of "Кажется, не удается получить содержимое веб-страницы через cURL – пользовательский агент и HTTP-заголовки установлены?"

Попробуйте добавить:

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

И ответить на два вопроса:

  1. Нет, не возможно блокировать запросы от чего-то вроде завитка. Если потребитель может говорить HTTP, то он может получить все, что может сделать браузер.
  2. Диагностика с помощью HTTP-прокси могла бы быть полезной для вас. Wireshark, fiddler, charles, et al. должен помочь вам в будущем. Или, сделайте так, как я сделал, и сделайте запрос из командной строки.

РЕДАКТИРОВАТЬ
Ах, я понимаю, о чем вы сейчас говорите. Итак, когда вы переходите к этой ссылке в первый раз, вы перенаправляетесь, а cookie (или файлы cookie) устанавливаются. Когда у вас есть эти файлы cookie, ваш запрос проходит по назначению.

Итак, вам нужно использовать cookiejar, как в этом примере: http://icfun.blogspot.com/2009/04/php-how-to-use-cookie-jar-with-curl.html

Таким образом, вам нужно будет сделать первоначальный запрос, сохранить файлы cookie и выполнить последующие запросы, включая файлы cookie.