Простая ошибка возврата парсера html dom 500
Я использую simple_html_dom.php библиотеку из этого примера
http://nimishprabhu.com/top-10-best-usage-examples-php-simple-html-dom-parser.html
Но я получил ошибку 500 внутри класса, когда я набираю url в браузере, он работает нормально?
У меня есть несколько vaules в массиве вроде этого
$result= Array (
[Avenya Group AG] =>
Array (
[link] => CHE-218.938.800
[href] => http://zh.powernet.ch/webservices/inet/HRG/HRG.asmx/getHRGHTML?chnr=0203038402&amt=020&toBeModified=0&validOnly=0&lang=1&sort=0 ) )
Когда я пробую что-то вроде этого
foreach($result as $key => $value) {
$xmlFind = file_get_html($value['href']);
foreach($xmlFind->find('a') as $a) {
echo '<p>'.$a->href.'</p>';
}
}
Я получил ошибку
Возникла ошибка PHP
Уровень важности: предупреждение
Сообщение: file_get_contents (http://zh.powernet.ch/webservices/inet/HRG/HRG.asmx/getHRGHTML?chnr=0203038402&amt=020&toBeModified=0&validOnly=0&lang=1&sort=0): не удалось открыть поток: HTTP-запрос не удался! Внутренняя ошибка сервера HTTP/1.1 500
Имя файла: libraries/Simple_html_dom.php
Номер строки: 76
Но когда я пытаюсь вручную, как этот
$xmlFind = file_get_html('http://zh.powernet.ch/webservices/inet/HRG/HRG.asmx/getHRGHTML?chnr=0203038402&amt=020&toBeModified=0&validOnly=0&lang=1&sort=0');
Результат есть, также, если я нахожу, что url я browser все в порядке, только проблема у меня есть, когда я пытаюсь петли массив??
Ответы
Ответ 1
проверить http://php.net/manual/en/function.file-get-contents.php Раздел примечаний.
Проверьте настройки сервера для "обертки fopen"
Я попробовал следующее
<?php
include('simple_html_dom.php');
$result= Array (
'Avenya Group AG' =>
Array (
'link' => 'CHE-218.938.800',
'href' => 'http://zh.powernet.ch/webservices/inet/HRG/HRG.asmx/getHRGHTML?chnr=0203038402&amt=020&toBeModified=0&validOnly=0&lang=1&sort=0' ) );
foreach($result as $key => $value) {
$xmlFind = file_get_html($value['href']);
foreach($xmlFind->find('a') as $a) {
echo '<p>'.$a->href.'</p>';
}
}
И получил этот
#
http://www.shab.ch/shabforms/servlet/Search?EID=7&DOCID=6890948
http://www.shab.ch/shabforms/servlet/Search?EID=7&DOCID=981331
http://zh.powernet.ch/webservices/inet/hrg/hrg.asmx/getExcerpt?Chnr=CH-020.3.038.402-5&Amt=20&Lang=1
mailto:[email protected]
Ответ 2
Прокси может быть проблемой. Используйте соответствующий прокси.
// Create a stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n",
'proxy' => 'tcp://221.176.14.72:80',
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents('http://ifconfig.me/ip', false, $context);
var_dump($file);
Ответ 3
Попробуйте это,
<?php
$result= Array (
'Avenya Group AG' =>
Array (
'link' => 'CHE-218.938.800',
'href' => 'http://zh.powernet.ch/webservices/inet/HRG/HRG.asmx/getHRGHTML?chnr=0203038402&amt=020&toBeModified=0&validOnly=0&lang=1&sort=0'
)
);
foreach($result as $arr_item){
if(is_array($arr_item)) {
if(isset($arr_item['href'])) {
echo file_get_contents($arr_item['href']);
}
}
}
?>
После выполнения вышеуказанного кода я получил этот ответ, как показано на прикрепленном изображении.
Если вы все еще получаете предупреждение, вы можете использовать curl для отправки запроса на получение.
поэтому вместо echo file_get_contents($arr_item['href']);
выше
замените его на следующий код.
$ch = curl_init($arr_item['href']);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$result = curl_exec($ch);
echo $result;
curl_close($ch);
![введите описание изображения здесь]()
Ответ 4
Это сообщение возвращается удаленным сервером. Он показывает, что сервер может быть недоступен в настоящее время.
Я думаю, что это может быть вызвано слишком большим количеством ресурсов, необходимых для выполнения различных запросов, которые вы делали в своем цикле. Он также может быть связан с некоторой защитой от отказа в обслуживании.
После достижения максимального количества разрешенных подключений он возвращает "HTTP 500 Server Too Busy".
Смотрите: https://www.iis.net/configreference/system.webserver/asp/limits
Атрибут requestQueueMax указывает максимальное количество одновременных запросов ASP, разрешенных в очередь. Любой клиентский браузер, который пытается запросить файлы ASP при заполнении очереди, отправляется с ошибкой HTTP 500 Server Too Busy.
Вы можете попытаться отложить каждый ваш вызов к URL-адресу с помощью sleep()
, если вы не ограничены по времени.
Лучше всего связаться с администратором /sys admin удаленного веб-сервиса, чтобы сообщить ему о проблеме, чтобы он мог исследовать.
В зависимости от того, что вы делаете в своем script, вы также можете проигнорировать сообщение об ошибке и продолжить следующий вызов:
foreach($result as $key => $value) {
// added @ to ignore the error
$xmlFind = @file_get_html($value['href']);
// continue to the next result
if (!$xmlFind) continue;
foreach($xmlFind->find('a') as $a) {
echo '<p>'.$a->href.'</p>';
}
}