Простая ошибка возврата парсера 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>';
    }
}