如果内容类型错误,则中止curl下载

时间:2013-04-21 15:07:05

标签: php curl content-type

我正在建立一个网站,用户可以在其中发布链接,curl(在php中)将抓取网址,并根据元数据,打开的图形标签等格式化某些内容。我将其设置为使用multi_init和multi_exec运行同步上传。我为班级here.创造了一个要点:它应该做的是:

  • 从多个网址获取元数据
  • 返回单个json字符串,但仅适用于内容类型为“text / html”的页面(所以不要打扰直接链接到图像,js,可执行文件等)

问题似乎是CURLOPT_HEADERFUNCTION的回调。我认为当内容类型头存在但不是html头时它会返回-1会中止下载但它似乎没有做任何事情(尽管检查看起来是正确的,它似乎返回-1。 )它似乎仍然允许任何内容类型通过。

这里特别是回调:

CURLOPT_HEADERFUNCTION  => function($ch, $header){

// if they're sending a content-type header, it must be text/html
 if(stripos(trim($header), "Content-Type") === 0){  

 list($key, $val) = explode(":", $header);

 if(stripos(trim($val), "text/html") === 0){
    return strlen($header);
  }
  else{
    return -1;
  }
}
else{ 
    return strlen($header);
}
}

我尝试过curl_close但是在回调中关闭curl时遇到错误。有什么建议?

1 个答案:

答案 0 :(得分:1)

使用回调设置(全局)变量。如果错误,请跳过curl_exec()来电。

$htmlheader = true;
function header_callback($ch, $headers)
{
    $GLOBALS['htmlheader']=false;
}
$ch = curl_init('http://www.example.com/');
curl_setopt($ch,CURLOPT_HEADERFUNCTION,  'header_callback');
if($htmlheader)
{
    $result = curl_exec($ch);
}   
curl_close($ch);