使PHP cURL跳过图像,视频等二进制数据

时间:2011-02-08 19:37:14

标签: php curl binary web-crawler

像这样设置curl:

  $ch = curl_init();
      curl_setopt($ch,CURLOPT_URL,$this->domain);
      curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
      curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,3);
      curl_setopt($ch,CURLOPT_FAILONERROR,TRUE);
      curl_setopt($ch,CURLOPT_USERAGENT,"Useragent");
      curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);
      curl_setopt($ch,CURLOPT_MAXREDIRS,1);
      $str = curl_exec($ch); 
      return $str;   
      $str = $this->cURL();

将网址传递到html网页,一切顺利 - 但是例如将直接链接传递给.jpg,它会返回一堆乱码数据。

我想确保如果一个页面重定向到.jpg或.gif等,它会被忽略,只返回html页面。

我似乎找不到这样做的卷曲setopt。

有什么想法吗?

- 天鹅。

2 个答案:

答案 0 :(得分:1)

Curl并不关心内容的文本(html)或二进制垃圾(jpg),它只会返回你告诉它的内容。你已经告诉curl使用“CURLOPT_FOLLOWLOCATION”选项跟踪重定向,所以它只会遵循重定向链直到达到常规限制,或者下载内容

如果您不知道URL可能包含的内容,则必须执行一些变通办法,例如发出自定义HEAD请求,该请求将返回URL的正常http标头,您可以提取响应的mime类型(Content-type: ...)并决定是否要获取它。

或者只是获取URL,然后根据完整响应标题中的mime类型保存/抛出数据。

答案 1 :(得分:0)

我的想法 - 使用HEAD请求,检查内容类型是否有趣(例如,另一个HTML),然后发出GET请求数据。

为HEAD请求设置CURLOPT_NOBODY