Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 简单\u html\u dom:403访问被拒绝_Php - Fatal编程技术网

Php 简单\u html\u dom:403访问被拒绝

Php 简单\u html\u dom:403访问被拒绝,php,Php,为了使用两种不同的“方法”解析HTML页面,我实现了这个函数。 正如您所看到的,两者都使用非常方便的类,名为simple\uhtml\udom。 区别在于第一种方法也使用curl加载HTML,而第二种方法不使用curl 这两种方法在很多页面上都可以正常工作,但我正在努力解决这个特定的调用: searchThroughDOM('https://fr.shopping.rakuten.com/offer/buy/3458931181/new-york-1997-4k-ultra-hd-blu-ray

为了使用两种不同的“方法”解析HTML页面,我实现了这个函数。 正如您所看到的,两者都使用非常方便的类,名为
simple\uhtml\udom
。 区别在于第一种方法也使用curl加载HTML,而第二种方法不使用curl

这两种方法在很多页面上都可以正常工作,但我正在努力解决这个特定的调用:
searchThroughDOM('https://fr.shopping.rakuten.com/offer/buy/3458931181/new-york-1997-4k-ultra-hd-blu-ray-blu-ray-bonus-edition-boitier-steelbook.html“,”简单的“html”和“dom”)

在这两种情况下,我最终都得到了403拒绝访问的响应。 我做错什么了吗? 还是有其他方法可以避免这种拒绝

function searchThroughDOM ($url, $method)
{
    echo '$url = '.$url.'<br>'.'$method = '.$method.'<br><br>';
    $time_start = microtime(true);

    switch ($method) {
        case 'curl':
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_HEADER, false);
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_REFERER, $url);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36');
            $str = curl_exec($curl);
            curl_close($curl);

            // Create a DOM object
            $html = new simple_html_dom();
            // Load HTML from a string
            $html->load($str);
            break;

        case 'simple_html_dom':
            $html = new simple_html_dom();
            $html->load_file($url);
            break;
    }

    $collection = $html->find('h1');

    foreach($collection as $x => $x_value) {
        echo 'x = '.$x.' => value = '.$x_value.'<br>';
    }

    $html->save('result.htm');
    $html->clear();

    $time_end = microtime(true);
    echo 'Elapsed Time (DOM) = '.($time_end - $time_start).'<br><br>';
}
函数searchThroughDOM($url$method)
{
回显“$url=”.$url.“
”.$method=”.$method.“

”; $time\U start=微时间(真); 开关($方法){ 案例“curl”: $curl=curl_init(); curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($curl,CURLOPT_头,false); curl_setopt($curl,CURLOPT_FOLLOWLOCATION,true); curl_setopt($curl,CURLOPT_URL,$URL); curl_setopt($curl,CURLOPT_REFERER,$url); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_USERAGENT,'Mozilla/5.0(windowsnt 10.0;Win64;x64)AppleWebKit/537.36(KHTML,像Gecko)Chrome/74.0.3729.169 Safari/537.36'); $str=curl\u exec($curl); curl_close($curl); //创建DOM对象 $html=新的简单html\U dom(); //从字符串加载HTML $html->load($str); 打破 案例“简单”html dom: $html=新的简单html\U dom(); $html->load_文件($url); 打破 } $collection=$html->find('h1'); foreach($x=>$x_值的集合){ 回显'x='.$x.=>值='.$x_值'.
'; } $html->save('result.htm'); $html->clear(); $time\U end=微时间(真); 回显“已用时间(DOM)=”。($Time\U end-$Time\U start)。”

; }
在我看来,“简单的html\U dom”没有错 您可以删除代码中简单的HTMLDOM“部分”,只剩下CURL 我想这就是问题的根源。 有很多原因导致卷曲无法在页面上工作 首先,我可以看到你补充

curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false); 您还应该尝试添加CURLOPT_SSL_VERIFYHOST,false

其次,检查你的卷发版本,看看是否太旧 第三个选项,如果以上都不起作用,您可能希望启用cookie,这可能是由于禁用cookie导致网站检测到它是机器,而不是真人发送请求。 最后,如果上述所有尝试都失败,请尝试其他库,甚至文件获取内容,
卷曲不是你唯一的选择,因为它是最强大的选择。

嗨,达曼,当然,在这种情况下,你“必须关闭”有两个原因,1是为了摆脱卷曲是否导致问题,如果你关闭检查,403不见了,你知道问题在哪里。2“fr.shopping.rakuten.com”的服务器不在“StfA”的控制之下。你不能要求他/她向“fr.shopping.rakuten.com”发送电子邮件,说“嗨,伙计们,帮我安装一些严重的SSL证书”,这样我就可以为我/我的老板抓取你的网页。如果你想完成这项工作,必须使用自签名Cpanel认证关闭“VERIFYHOST”的webiste,对吗?嗨,达曼,如果你能简单地接受我在这个例子中是正确的,并给那些曾经/现在/将来对这个问题感到困惑的人一个正确的方式来解决,那就太好了。我不能接受任何东西。如果OP不接受你的答案,那就意味着它可能对他们没有帮助。在我这边,我已经说过,关闭验证几乎从来都不是一个好主意。我不会就此和你争论。