cURL возвращает 404, а страница находится в браузере.

есть уже похожие вопросы о stackoverflow, но ни один из их решений не работает для меня. Я пытаюсь захватить страницу на LoveIt.com с помощью cURL, но она возвращает мне ошибку 404, в то время как url ​​отлично работает в браузере:

$url = 'http://loveit.com/loves/P0D1jlFaIOzzZfZqj_bY3KV'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); curl_setopt ($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_REFERER,'http://loveit.com/'); 

Вот заголовок, который я получаю:

Массив ([url] => http://loveit.com/loves/P0D1jlFaIOzzZfZqj_bY3KV [content_type] => text / html; charset = utf-8 [http_code] => 404 [header_size] => 667 [request_size] => 172 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.320466 [namelookup_time] => 0.000326 [connect_time] => 0.119046 [pretransfer_time] => 0.119089 [size_upload] => 0 [ size_download] => 499 [speed_download] => 1557 [speed_upload] => 0 [download_content_length] => 499 [upload_content_length] => 0 [starttransfer_time] => 0.320438 [redirect_time] => 0 [certinfo] => Array () [ primary_ip] => — [primary_port] => 80 [local_ip] => — [local_port] => 53837 [redirect_url] =>)

Я прочитал, что на каком-то веб-сайте есть защита от подобных сценариев; и я тестировал некоторые предлагаемые решения, но никто не работал для меня (CURLOPT_USERAGENT, CURLOPT_REFERER …)

Любые идеи о том, что здесь происходит?

Я хотел бы сделать резервную копию моей учетной записи LoveIt, поэтому я делаю это (нет функций экспорта и нет ответов от LoveIt.com о здоровье веб-сайта)

Я быстро проверил указанную страницу с включенным LiveHeaders, и я заметил, что куча файлов cookie установлена. Я подозреваю, что, поскольку это не «нормальный» URL-адрес, вам нужно передать эти файлы cookie при перенаправлении, иначе вы закончите CURLOPT_COOKIEJAR с помощью 404. Используйте CURLOPT_COOKIEJAR с вашим экземпляром cURL при запуске. См .: http://php.net/manual/pl/function.curl-setopt.php

У меня была аналогичная проблема с сайтом. В моем случае они ожидали, что USER_AGENT будет настроен так, чтобы кто-нибудь с этой проблемой в будущем также должен был это проверить.

Вам не нужно сохранять файл cookie с помощью хром.

Вы можете создать функцию для получения этого файла cookie, а затем повторно использовать его.

Подобно:

 <?php error_reporting(E_ALL); Class Crawler{ var $cookie; var $http_response; var $user_agent; function __construct($cookie){ $this->cookie = (string) $cookie; $this->user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0'; } function get($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent); // Here we create the file with cookies curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie); $this->http_response = curl_exec($ch); } function get_with_cookies($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent); curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie); // Here we can re-use the cookie file keeping the save of the cookies curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie); $this->http_response = curl_exec($ch); } } $crawler = new Crawler('cookie_file_name'); // Creating cookie file $crawler->get('uri'); // Request with the cookies $crawler->get_with_cookies('uri'); 

С уважением.

Спасибо за ваш ответ, поэтому я посетил страницу, сохранил файлы cookie в файле cookie.txt (с экспортом chrome extenson cookie.txt), который я использую NOT CURLOPT_COOKIEJAR, но для опции CURLOPT_COOKIEFILE .

 $cookiefile = './cookie.txt'; curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiefile); 

и теперь это работает! Спасибо за ваши отзывы, это было действительно полезно.