使用CURL和PHPSimpleHTMLDOMParser给我 - 500内部服务器错误

时间:2014-06-29 20:35:02

标签: php curl

我正在使用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!

我的错误在哪里以及我如何使这件事有效?

2 个答案:

答案 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用户代理,所以请随意尝试使用其他东西。