[英]Using CURL and PHPSimpleHTMLDOMParser gives me - 500 Internal Server error
我正在使用PHP Simple HTML DOM解析器,在这里您可以检查有关它的更多信息: http : //simplehtmldom.sourceforge.net/
而且我正在使用CURL,因为此Web地址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
内部服务器错误
服务器遇到内部错误或配置错误,无法完成您的请求。
请与服务器管理员webmaster@superweb.bg联系,并告知他们错误发生的时间以及您可能做的任何可能导致错误的事情。
服务器错误日志中可能会提供有关此错误的更多信息。
此外,尝试使用ErrorDocument处理请求时遇到404 Not Found错误。
该脚本仅不适用于此Web地址,因为当我尝试加载其他网站(如mandmdirectDOTcom)时,它正在唤醒OKEY!
我的错误在哪里以及如何使该功能起作用?
尝试在请求中设置主机标头。 目标域可能位于共享服务器上,并且没有Host标头,则服务器不知道该怎么做。
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Host: www.sportsdirect.com'));
尝试此以获取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用户代理,因此可以尝试使用它来使用其他功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.