首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释以"multipart response - MultiPartBoundary“应用编程接口监控摄像机格式发送响应的图像

解释以"multipart response - MultiPartBoundary“应用编程接口监控摄像机格式发送响应的图像
EN

Stack Overflow用户
提问于 2019-02-06 08:12:44
回答 1查看 36关注 0票数 0

我使用的是一个Surveillance API,它显示了实时图像,文档说答案是多部分响应格式,其中每个MultiPartBoundary图像的前面都有一个"- JPEG“标记,我不确定如何解释浏览器中返回的这些图像。

代码语言:javascript
复制
<?php

$Cookie = (dirname(__FILE__) . "/cookie.txt");


/*
* PRIMEIRA REQUISIÇÃO, RECEBE O COOKIE PARA O DOMINIO
*/
$curl = curl_init();

curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt_array($curl, array(
    CURLOPT_VERBOSE        => true,
    CURLOPT_PORT           => '8000',
    CURLOPT_URL            => 'http://camerasquadion.ddns.net:8000/mjpegstream.cgi',
    CURLOPT_COOKIEJAR      => $Cookie,
    CURLOPT_COOKIEFILE     => $Cookie,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING       => "",
    CURLOPT_MAXREDIRS      => 10,
    CURLOPT_TIMEOUT        => 20000,
    CURLOPT_USERPWD        => "Admin:Quadion*1234",
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_HTTPAUTH       => CURLAUTH_BASIC,
    CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST  => "GET",
    CURLOPT_HEADER         => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_FILETIME       => true,
    CURLOPT_HTTPHEADER      => array(
        "Content-Type: multipart/x-mixed-replace; boundary=MultiPartBoundary",
    ),
));


$responde  = curl_exec ($curl);

// Recupera o código HTTP retornado pela URL de destino
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);

curl_close($curl);




/*
 * 2º Requisição, envio do cookie
 */
$ch = curl_init();

// Através da operação CURLOPT_COOKIEFILE estarei enviando meu COOKIE.
curl_setopt_array($ch, array(
    CURLOPT_COOKIEFILE      => $Cookie,
    CURLOPT_URL             => 'http://camerasquadion.ddns.net:8000/mjpegstream.cgi?camera=108801',
    CURLOPT_RETURNTRANSFER  => true,
    CURLOPT_HTTPHEADER      => array(
        "Content-Type: multipart/x-mixed-replace; boundary=MultiPartBoundary",
    ),
));

$response = curl_exec ($ch);

// Recupera o código HTTP retornado pela URL de destino
$httpCode2 = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);

?>


<img src="data:image/jpg;base64,<?=base64_encode($response)?>">
EN

回答 1

Stack Overflow用户

发布于 2019-02-06 10:21:45

假设您的代码的CURL部分工作正常,并在$response中获得有效的响应。

CURLOPT_RETURNTRANSFER设置不仅会返回响应正文,还会返回http头。为了获得响应体,需要跳过这些内容。

然后,响应主体是由分隔符"- MultiPartBoundary"分隔的一系列图像。您需要使用它来拆分响应正文,以获得单独的图像。

代码语言:javascript
复制
list(,$responseBody) = explode("\r\n\r\n", $response, 2);

$images = explode("- MultiPartBoundary", $responseBody);

foreach ($images as $image) {
    echo '<img src="data:image/jpg;base64,' . base64_encode(trim($image)) .'">';
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54544958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档