webman+gateway对接华为摄像头,卡在最后一步

calvin

问题描述

我在webman上装了gatewayWorker插件,起了个tcp服务用于监听摄像头主动注册和后续和摄像头的交互。现在的情况是服务端收到了PUT的设备基础信息,按文档的交互流程上的话我还需要用建立起来的这条tcp连接去请求设备接口(/SDCAPI/V1.0/MiscIaas/System),接口采用HTTP Digest的认证方式。这个请求我应该咋写,有大佬给个思路吗?下面是相关文档截图和日志信息

截图
截图
截图
截图

截图
截图

778 3 3
3个回答

workers

是可以的 创建一个tcp服务就行了 你这个摄像头是什么品牌型号啊 看起来对二开支持的挺好的 买一个研究研究

  • calvin 2023-08-16

    摄像头是华为的D3250-10-SIU;我现在是用webman的自定义进程监听http,能收到摄像头put过来的基础信息,就是用起来感觉不好用,比如给特定设备推信息这项都要自己实现。我看文档GatewayWorker好像不能监听http

  • calvin 2023-08-16

    可以的,刚用GatewayWorker试了下

  • workers 2023-08-22

    方便发一下摄像头文档看看吗?还有购买链接,多谢

  • calvin 2023-08-22

    可以的,给个邮箱

  • workers 2023-08-22

    365581323@qq.com

  • calvin 2023-08-22

    已发

  • workers 2023-08-22

    谢谢

liong
<?php

// 设备接口URL
$url = 'http://设备IP地址/SDCAPI/V1.0/MiscIaas/System';

// 设备基础信息
$deviceInfo = [
    'deviceId' => '设备ID',
    'deviceName' => '设备名称',
    // 其他设备基础信息字段
];

// 构建HTTP Digest认证头部
$digestHeader = generateDigestHeader('用户名', '密码', $url, 'GET');

// 发送请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [$digestHeader]);
$response = curl_exec($ch);
curl_close($ch);

// 处理响应
if ($response) {
    // 响应成功
    echo "接收到设备接口的响应:" . $response;
} else {
    // 响应失败
    echo "发送请求失败";
}

/**
 * 生成HTTP Digest认证头部
 * @param string $username 用户名
 * @param string $password 密码
 * @param string $url 请求的URL
 * @param string $method 请求方法(GET, POST, PUT等)
 * @return string
 */
function generateDigestHeader($username, $password, $url, $method) {
    // 生成随机的nonce和cnonce
    $nonce = md5(uniqid());
    $cnonce = md5(uniqid());

    // 生成HA1和HA2
    $ha1 = md5($username . ':' . 'Digest' . ':' . $password);
    $ha2 = md5($method . ':' . $url);

    // 生成response
    $response = md5($ha1 . ':' . $nonce . ':' . $cnonce . ':' . 'auth' . ':' . $ha2);

    // 构建认证头部
    $digestHeader = 'Authorization: Digest ';
    $digestHeader .= 'username="' . $username . '", ';
    $digestHeader .= 'realm="Digest", ';
    $digestHeader .= 'nonce="' . $nonce . '", ';
    $digestHeader .= 'uri="' . $url . '", ';
    $digestHeader .= 'cnonce="' . $cnonce . '", ';
    $digestHeader .= 'response="' . $response . '", ';
    $digestHeader .= 'algorithm="MD5", ';
    $digestHeader .= 'qop=auth';

    return $digestHeader;
}

将示例代码中的占位符替换为实际的设备信息和认证信息

Gin

guzzle 很简单 new GuzzleClient(['base_uri' => $base_uri,'auth' => ['admin', 'hik123456', 'digest']]);

  • liong 2023-08-22

    这个更方便

  • calvin 2023-08-22

    是在设备建立起的长连接上做双向交互

🔝