Использование CURL и PHPSimpleHTMLDOMParser дает мне - 500 Internal Server error

Я использую PHP Simple HTML DOM Parser, здесь вы можете узнать больше об этом: http://simplehtmldom.sourceforge.net/

А также я использую CURL, потому что этот веб-адрес http://www.sportsdirect.com не загружается обычные примеры из SimpleHTMLDom.

Итак, вот код, который я использую:

<?php
include_once('../simple_html_dom.php');

$curl = curl_init(); 

 curl_setopt($curl, CURLOPT_URL, 'http://www.sportsdirect.com/'); 
 curl_setopt($curl, CURLOPT_HEADER, 0);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);  
 $str = curl_exec($curl);  
 curl_close($curl);  
  
 $html= str_get_html($str); 

echo $html->plaintext;
?>

Когда я пытаюсь загрузить скрипт, он выдает: 500 Internal Server Error

Внутренняя Ошибка Сервера

Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос.

Пожалуйста, свяжитесь с администратором сервера, [email protected] и сообщите им время возникновения ошибки и все, что вы могли сделать, что могло вызвать ошибку.

Дополнительные сведения об этой ошибке можно найти в журнале ошибок сервера.

Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 404 Not Found.

Этот скрипт просто не работает для этого веб-адреса, потому что, когда я пытаюсь загрузить другой веб-сайт, такой как mandmdirectDOTcom, он просыпается OKEY!

Где моя ошибка и как я могу заставить эту штуку работать?


person user3788452    schedule 29.06.2014    source источник
comment
Проверьте журналы вашего сервера. Вместо этого класса вы также можете использовать сканер Symfony dom, который отлично работает.   -  person Mateusz Nowak    schedule 30.06.2014


Ответы (2)


Попробуйте это для выборки curl. Это работает для меня в этом случае. Это стандартный набор параметров и настроек завивки, которые я использую, и они хорошо работают:

include_once('simple_html_dom.php');

$url = "http://www.sportsdirect.com";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSLVERSION, 3);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$str = curl_exec($curl);
curl_close($curl);

$html = str_get_html($str); 

echo $html->plaintext;

Я считаю, что проблема с вашими исходными настройками curl заключалась в отсутствующем пользовательском агенте. Попробуйте тот же сценарий с закомментированной строкой CURLOPT_USERAGENT, чтобы понять, что я имею в виду.

Многие серверы имеют настройки брандмауэра, которые запрещают curl запросы от пользователей, отправляющих запросы без соответствующей настройки пользовательского агента. Пользовательский агент, который я установил здесь, является довольно общим пользовательским агентом Firefox, поэтому не стесняйтесь экспериментировать с ним, чтобы использовать что-то еще.

person Giacomo1968    schedule 29.06.2014
comment
Большое тебе спасибо! Ваше решение работает просто ОТЛИЧНО! Дай Бог Вам здоровья, Вам и Вашей семье!!! - person user3788452; 30.06.2014
comment
@user3788452 user3788452 К вашему сведению, вам не хватало только опции CURLOPT_USERAGENT. - person Rahil Wazir; 30.06.2014

Попробуйте установить заголовок Host в запросе. Возможно, целевой домен находится на общем сервере, и без заголовка Host сервер не знает, что делать.

curl_setopt($curl, CURLOPT_HTTPHEADER, array('Host: www.sportsdirect.com'));
person shaunc    schedule 29.06.2014
comment
Этот! идеально! облегчение после 6 часов отладки! здорово! - person LowFieldTheory; 06.12.2015