【问题标题】:abort curl download if content type is wrong如果内容类型错误,则中止 curl 下载
【发布时间】:2013-04-21 15:07:05
【问题描述】:

我正在建立一个网站,用户可以在其中发布链接,curl(在 php 中)将抓取 url,并根据元数据格式化某些内容,打开图形标签等。我将其设置为使用 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 的错误。有什么建议么?

【问题讨论】:

    标签: php curl content-type


    【解决方案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);
    

    【讨论】:

    • 我必须更改一些东西才能使其与 multi_exec 一起工作(主要使用数组而不是单个全局),但这确实有效,谢谢。我用类的工作版本更新了上面的要点。
    猜你喜欢
    • 1970-01-01
    • 2018-02-08
    • 2015-05-27
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多