【问题标题】:Get content-type of images in HTML file with Curl get_info使用 Curl get_info 获取 HTML 文件中图像的内容类型
【发布时间】:2023-04-08 23:36:02
【问题描述】:

我正在使用带有简单 HTML DOM 的 Curl,如下所示:

$url = $_GET['url'];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
...
...
$html = new simple_html_dom();
$html->load($curl_scraped_page, true, false);

foreach($html->find('img') as $a) {
    echo $a;
}

这将回显图像。所以现在我正在尝试获取 image/jpeg 的内容类型,所以我尝试了:

$type = (curl_getinfo($a, content_type));
echo $type;

还有:

  echo curl_getinfo($a, content_type);

我什么也没收到(空白屏幕)。如何在每个元素上使用get_info

【问题讨论】:

    标签: php curl echo content-type simple-html-dom


    【解决方案1】:

    首先,要从获取文档中获取内容类型,请使用常量CURLINFO_CONTENT_TYPE

    $type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
    echo $type;
    

    其次,您只获取了 HTML 而不是图像。说 $a 输出图像是错误。你输出 HTML <img src="">。如果您在浏览器中执行此操作,您会看到图像,但这只是因为浏览器在客户端获取这些图像。

    获取内容类型的最简单方法是使用检查文件扩展名。

    $ext = pathinfo($a['src'], PATHINFO_EXTENSION);
    

    如果您确实需要使用文件扩展名,则必须进行额外的 curl 调用。最好使用 curl_multi 并行执行这些操作。

    $mh = curl_multi_init();
    
    foreach($html->find('img') as $a) {
        $src = $a['src']; // You probably need to rewrite relative URL to absolute URLs
        $ch = curl_init($src);
        $ch = curl_set_opt($ch, CURLOPT_CUSTOMREQUEST, "HEAD");
        curl_multi_add_handle($mh, $ch);
        $handles[] = $ch;
    }
    
    $running = null;
    do {
        curl_multi_exec($mh, $running);
    } while ($running);
    
    foreach ($handles as $ch) {
        $src = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
        $type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
        $image_types[$src] = $type;
    }
    

    代码未经测试

    请注意,接收到的内容类型永远不能完全信任,也不应该用于安全措施。如果您想确定,请下载所有图像(GET 请求而不是 HEAD 请求)并使用fileinfo extension

    【讨论】:

    • 我无法让它工作,但如果没有其他问题,我会接受作为答案,因为这对我来说确实有意义,我一定是做错了什么......非常感谢
    • 对不起,我说的是$a,但你需要使用curl处理程序$ch
    • 好的,现在我发现我真的误读了你的问题。抱歉,请稍等。
    猜你喜欢
    • 2018-09-09
    • 2011-08-16
    • 2013-03-22
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 2015-07-25
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多