简单的html dom解析器返回错误500

时间:2015-12-06 09:31:44

标签: php foreach simple-html-dom

我正在使用此示例中的 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');

结果就在那里,如果我输入那个网址我浏览器一切正常,只有我遇到的问题是当我尝试循环数组时?

4 个答案:

答案 0 :(得分:6)

检查http://php.net/manual/en/function.file-get-contents.php备注部分。

请检查&#34; fopen wrappers&#34;

的服务器设置

我尝试了以下

<?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:info@powernet.ch

答案 1 :(得分:4)

代理可能是个问题。使用适当的代理。

// 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);

答案 2 :(得分: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发送get请求。 而不是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);

enter image description here

答案 3 :(得分:3)

远程服务器返回此消息。它显示此时服务器可能不可用。

我认为这可能是由于执行您在循环中发出的不同请求所需的过多资源所致。它也可以链接到一些拒绝服务保护。

在达到授权连接的最大数量后,它返回&#34; HTTP 500 Server Too Busy&#34;。

请参阅:https://www.iis.net/configreference/system.webserver/asp/limits

  

requestQueueMax属性指定允许进入队列的最大并发ASP请求数。在队列已满时尝试请求ASP文件的任何客户端浏览器都会发送HTTP 500 Server Too Busy错误。

如果您没有时间限制,可以尝试使用sleep()将每个来电延迟到网址。

最好的办法是联系远程Web服务的所有者/系统管理员,以便让他知道问题,以便他进行调查。

根据您在脚本中的操作,您还可以忽略错误消息并继续下一次调用:

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>';
    }
}