在PHP上使用CURL解析任何网页

时间:2017-05-08 00:39:34

标签: php html parsing curl

是否可以编写一个PHP函数,以与浏览器相同的方式返回任何可能链接的HTML字符串?链接示例:“http://google.com”,“”,“mywebsite.com”,“somesite.com/.page/nn/?s=b#85452”,“lichess.org”

我尝试了什么:

$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, 20);
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');
$data = curl_exec($curl);
if(curl_errno($curl)){
    echo 'Curl error: ' . curl_error($curl);
}
echo $data;
curl_close($curl);

可悲的是,对于某些链接,由于SSL或任何其他内容,此代码返回空白页面,但对于某些链接,它可以正常工作。

或者除了CURL之外还有其他选择吗?我只是不明白为什么php无法检索任何开箱即用的HTML。

1 个答案:

答案 0 :(得分:1)

如果您运行的是旧版本的PHP,则CURL可能会在SSL站点上失败。确保您的操作系统和PHP版本是最新的。

您也可以选择使用适用于网址的file_get_contents(),如果您只想制作简单的GET请求,通常会更简单。

$html = file_get_contents('https://www.google.com/');