PHP中的Curl将HTML检索到不起作用的变量中


Curl in PHP retrieve HTML into variable not working

我的代码片段(这是在以前的Curl命令之后登录并存储cookie):

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,"https://www.example.com");   
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSLVERSION, 3);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie.txt');
$result = curl_exec ($curl);
if ($result === FALSE) {
    echo "cURL Error: " . curl_error($curl);
}
curl_close ($curl);
print 'result: '.$result;

显示的结果只打印标题。换句话说,实际的源HTML似乎没有保存到$result变量中。我知道结果就在那里,因为当我在检索到的页面上查看源时,一切都在那里。如果有区别的话,我请求的页面是XML。

感谢

更换print 'result: '.$result;

带有

echo htmlspecialchars($result);

如果您想要显示<tags>,您需要这样做。

您已经设置了这个变量:

curl_setopt($curl,CURLOPT_HEADER,1);

这就是为什么你会得到标题。

您正在将结果打印到浏览器,浏览器会看到XML标记并使用它们执行XML操作。数据之所以存在,是因为您在查看->源时可以看到它。如果删除标题,浏览器可能会抱怨缺少样式表并显示原始XML。但正如你已经向自己证明的那样,你有数据。

要详细说明@rand'Chris的答案,您可以remove两者:

curl_setopt($curl, CURLOPT_HEADER, 1);

curl_setopt($curl, CURLOPT_VERBOSE, 1);

并且您将不再接收来自example.com的标头。当然,由于您访问的是不同的网站,因此这可能不是完整的(甚至是正确的)解决方案。