当前位置: 首页 > 知识库问答 >
问题:

如何利用PHP curl设置海康威视相机参数

栾景胜
2023-03-14
define('_EOL', "\n");

// Set device name
$url='http://192.168.6.12/System/deviceInfo';
$creds='admin:password';
$body='<?xml version="1.0" encoding="UTF-8"?>'.
    '<DeviceInfo xmlns="http://www.hikvision.com/ver10/XMLSchema" version="1.0">'.
    '<deviceName>Cam 7 AAAA</deviceName>'.
    '<deviceID>88</deviceID>'.
    '</DeviceInfo> ';
$tmpFile='temp.txt';
file_put_contents($tmpFile, $body);
$bytes=filesize($tmpFile);
$stream=fopen($tmpFile, 'r');
echo('Bytes='.$bytes.', handle='.$stream._EOL);

$session=curl_init(); // initialize a curl session
curl_setopt($session,CURLOPT_URL, $url);
curl_setopt($session,CURLOPT_USERPWD, $creds);
curl_setopt($session,CURLOPT_HEADER,TRUE);
curl_setopt($session,CURLOPT_RETURNTRANSFER, TRUE);
//curl_setopt($session,CURLOPT_PUT, TRUE);
curl_setopt($session,CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($session,CURLOPT_CUSTOMREQUEST, 'Content-Type: application/xml; charset="UTF-8"');
curl_setopt($session,CURLOPT_INFILE, $stream);  // XML block
curl_setopt($session,CURLOPT_INFILESIZE, $bytes); // size in bytes

$page=curl_exec($session);
$info=curl_getinfo($session);
$err='curl error: '.curl_errno($session).' '.curl_error($session);

curl_close($session);

print_r($info);
echo($err._EOL);
echo($page._EOL);
Bytes=185, handle=Resource id #6
Array
(
    [url] => http://192.168.6.12/System/deviceInfo
    [content_type] => 
    [http_code] => 0
    [header_size] => 0
    [request_size] => 197
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 0.016
    [namelookup_time] => 0
    [connect_time] => 0.016
    [pretransfer_time] => 0.016
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => 185
    [starttransfer_time] => 0.016
    [redirect_time] => 0
    [certinfo] => Array
        (
        )

    [primary_ip] => 192.168.6.12
    [primary_port] => 80
    [local_ip] => 192.168.6.99
    [local_port] => 2903
    [redirect_url] => 
)
curl error: 52 Empty reply from server

顺便说一下,这是相机对GET/system/deviceinfo的响应:

<?xml version="1.0" encoding="UTF-8"?>
<DeviceInfo version="1.0" xmlns="http://www.hikvision.com/ver10/XMLSchema">
<deviceName>Cam 2 DEMO</deviceName>
<deviceID>88</deviceID>
<deviceDescription>IPCamera</deviceDescription>
<deviceLocation>hangzhou</deviceLocation>
<systemContact>Hikvision.China</systemContact>
<model>DS-2CD2042WD-I</model>
<serialNumber>DS-2CD2042WD-I20170519BBWR764768522</serialNumber>
<macAddress>18:68:cb:76:48:ce</macAddress>
<firmwareVersion>V5.4.5</firmwareVersion>
<firmwareReleasedDate>build 170124</firmwareReleasedDate>
<bootVersion>V1.3.4</bootVersion>
<bootReleasedDate>100316</bootReleasedDate>
<hardwareVersion>0x0</hardwareVersion>
</DeviceInfo>

之前,我尝试使用所有三种EOL类型(Mac、linux、DOS),然后将它们全部删除,如上面的代码所示。我知道身份验证是有效的,因为我能从摄像机里读到任何东西。我还可以成功地发送没有数据或XML块要求的PUT命令,例如重新启动。所以我怀疑通过curl发送XML的方式存在一些问题。另外,我可以在登录时通过网络浏览器更改设备名称。然后,当我读取设备信息时,更改会显示在XML响应中。你知道我哪里出了问题吗?多谢了。

更新8/30/2018

共有1个答案

胡新
2023-03-14

差不多两年半后,我当时使用的海康威视相机型号现在已经过时了,API又换了。因为我是从Amazon那里买的相机,所以海康威视不会提供任何支持,甚至不会给我指向API上的有效文档。所以我转向了一个不同的解决方案。

我转而使用Ruby和Watir通过web界面与相机一起工作。毫不奇怪,这证明是困难的,因为每个配置页面上的HTML缺少选择表单元素的唯一信息。尽管如此,经过足够的工作,我还是能够编写一个完全自动化相机配置的脚本。以下是该脚本中的几个关键片段。

require 'watir-webdriver'
require "watir-webdriver/extensions/alerts"

  @browser = Watir::Browser.new :chrome # chrome @browser window

  # Select Time Zone, index 1
  @browser.select_list(:index, 1).select_value('CST+0:00:00')

前两个加载Watir Webdriver,它是与浏览器交互的核心软件。中间一行打开一个chrome浏览器。最后两个示例展示了当字段没有唯一的标识标签(如ID)时如何选择字段并设置值。

 类似资料:
  • 技术支持工程师-医疗方向-杭州 时间线: 9.04:测评 9.06:笔试 9.21:一面 1、一面(钉钉)(第一个面试) 1.01 自我介绍 1.02 问项目 1.03 项目中的主要工作 1.04 最有成就感的事情,详细说下 1.05 当班长的体会 1.06 对这个岗位的了解 1.07 课余爱好 1.08 长期坚持的爱好 1.09 为什么选这个城市 1.10 反问

  • 刚刚面的海康威视。找的是Java开发。一进是线下面的。然后他开始也不问,我技术啊,他就问我一些七七八八的学校做什么,你怎么自学的?你觉得你可算了多少嗯什么你最精通的什么框架?笑死了,我说我就会一个是公布的,其他不是很熟练。他说他这边要求必须精通三个以上的框架。真**笑死我了。然后说什么妮蔻,你这才刷至少得刷200道题啊?然后就是说你技术上不行。然后问我练了多少家公司了,怎么有没有考虑,为什么没有通

  • 我有一个海康威视IP摄像机内置的人计数应用程序。我正在尝试构建一个桌面/Web应用程序,它读取通过的人数并对其进行处理。我只想知道我怎样才能知道这些人的数量,不管用什么编程语言。相机型号为海康威视IDS-2CD6412FWD/C。任何回答都很重要。谢谢你。

  • null 我如何向摄像机发送重置请求?或者有没有我们可以与HTTP get post方法一起使用的命令列表?有海康威视CGI的名单吗?和Onvif命令来重置相机? 任何帮助都是感激的

  • 项目遇到的难点 项目有哪些功能 vue中的指令 computed使用场景 js深浅拷贝 路由跳转方法 如果让你设计一个任务面板,你会实现哪些功能 被突然来的电话吓到了 我和面试官都在咳 有些忘了,感觉没戏答的不怎么好

  • 先共享简历,然后开始面试,状况百出啊,希望能给过吧! 面试问题: 1自我介绍 2问项目 3问竞赛 4问测试技能 5给一支钢笔,怎么测试 6职业规划 7为什么想去杭州 #面经##秋招#