【问题标题】:curl unable to download webpagescurl无法下载网页
【发布时间】:2012-07-22 05:06:20
【问题描述】:

我正在尝试打开网站的主页,并使用 curl 和 php 从它的 html 标记中提取标题和描述,我在一定程度上成功地做到了这一点,但是我无法打开许多网站。我的代码在这里:

function curl_download($Url){
     if (!function_exists('curl_init')){
        die('Sorry cURL is not installed!');
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $Url); 
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $output = curl_exec($ch);
    curl_close($ch); 
    return $output;
}
// $url is any url
$source=curl_download($url);
$d=new DOMDocument();
$d->loadHTML($source);
$title=$d->getElementsByTagName("title")->item(0)->textContent)
$domx = new DOMXPath($d);
$desc=$domx->query("//meta[@name='description']")->item(0);
$description=$desc->getAttribute('content');
?>

此代码适用于大多数网站,但有很多网站甚至无法打开。可能是什么原因?

当我尝试使用get_headers 函数获取这些网站的标头时,它工作正常,但没有使用 curl 打开这些标头。其中两个网站是blogger.comlive.com

【问题讨论】:

  • 会发生什么?有什么错误吗?
  • 只是猜测......他们是否可能阻止 curl(因为 curl 尊重 robots.txt,或者服务器端对 curl 的请求标头皱眉)?
  • 没有错误,什么都不返回,我试过直接用file_get_contents函数打开,结果一样,打不开。
  • curl 的反应好像网站不存在..
  • 我认为这些网站需要身份验证才能访问

标签: php curl


【解决方案1】:

替换:

$output = curl_exec($ch);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
$output = curl_exec($ch);
if (!$output) {
   echo curl_error($ch);
}

看看为什么 Curl 失败了。

最好总是检查函数调用的结果,看看它们是否成功,并在它们失败时报告。虽然某个功能可能在 99.999% 的时间内有效,但您需要报告它失败的次数以及失败的原因,以便在可能的情况下确定并修复根本原因。

【讨论】:

  • "SSL 证书问题,验证 CA 证书是否正常。详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed" 这是它显示的错误,它与 SSL 有关,但我认为curl可以处理ssl吗?其他受 SSL 保护的网站正在响应。
  • 我知道这是一个 SSL 问题。添加这个:curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSLVERSION, 3);。我已经更新了上面的答案。
  • 哇哇哇,效果很好,太好了,谢谢,如果你不介意,我可以在推特上关注你吗?
  • 当然,但我不怎么发推文:@rasa7777
  • 好的,谢谢..我只是想和程序员和商务人士接触。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多