我正在使用PHP Simple HTML DOM Parser,您可以在这里查看更多信息:http://simplehtmldom.sourceforge.net/
我也使用CURL,因为这个网址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内部服务器错误
内部服务器错误
服务器遇到内部错误或配置错误,无法完成您的请求。
请与服务器管理员webmaster@superweb.bg联系,告知他们错误发生的时间以及可能导致错误的任何操作。
服务器错误日志中可能提供了有关此错误的更多信息。
此外,尝试使用ErrorDocument处理请求时遇到404 Not Found错误。
这个脚本不适用于这个网址,因为当我尝试加载其他网站如mandmdirectDOTcom时,它正在调用OKEY!
我的错误在哪里以及我如何使这件事有效?
答案 0 :(得分:1)
尝试在请求中设置主机标头。目标域可能位于共享服务器上,如果没有Host头,服务器就不知道该怎么做。
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Host: www.sportsdirect.com'));
答案 1 :(得分:0)
尝试使用此curl
提取。在这种情况下,它适用于我。这是一套标准卷曲选项&amp;设置我使用得很好:
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用户代理,所以请随意尝试使用其他东西。