如何使用curl和php将cookie发送到外部.cgi页面?

时间:2018-10-09 18:48:43

标签: php api curl

我需要使用php在我的Web系统上显示安全摄像机图像。我正在使用curl尝试完成此任务。集成由一个登录名组成,然后,将生成外部服务器的SessionID,我需要再次发送以完成身份验证。但是,会显示摄像机图像。我怎样才能做到这一点?这是我正在使用的代码:

<?php

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


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

curl_setopt_array($curl, array(
    CURLOPT_COOKIEJAR => $Cookie,
    CURLOPT_PORT => '8000',
    CURLOPT_URL => 'http://camerasquadion.ddns.net:8000/camera.cgi',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_USERPWD =>  "usuario:senha",
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
));


$response = curl_exec($curl);
$err      = curl_error($curl);

curl_close($curl);


if ($err) {
      echo "cURL Error #: <br>" . $err;
} else {
      //$this->Result = json_decode($response, true);
      echo "Resposta : " . $response;
}


# SEGUNDA REQUISIÇÃO, ENVIA O COOKIE RECEBIDO DE VOLTA PARA O DOMINIO
$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/camera.cgi',
    //CURLOPT_URL => 'camerasquadion.ddns.net',
    CURLOPT_RETURNTRANSFER => true,
));

$output = curl_exec($ch);


//print_r($output);

?>


<html>    
    <body>
        <h1>Access D-Guard</h1>
        <hr>

        <img src="http://camerasquadion.ddns.net:8000/camera.cgi?camera=108801&resolucao=640x480&qualidade=100&formato=jpg" />

    </body>
</html>

1 个答案:

答案 0 :(得分:0)

登录名/密码似乎不正确,因此您的第一个请求失败。

此外,如果您要使用PHP进行身份验证,并且最终用户无需身份验证即可立即查看该图像,则需要使用curl下载图像-该图像将在您第一次调用的$response中,您需要立即请求图片网址的位置:

<?php
// ...
CURLOPT_URL => 'http://camerasquadion.ddns.net:8000/camera.cgi?camera=108801&resolucao=640x480&qualidade=100&formato=jpg',

然后将图像存储在服务器上,或直接将其输出到浏览器:

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

您可能需要调整代码才能使其正常工作,但这是基本思想。

同样,第一步是具有有效的用户名和密码以通过身份验证。