热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CodeGo.net>如何使用SOAP动作和HttpClient授权发送ONVIF请求到网络摄像机

我正在研究在局域网中发现和控制网络摄像机的项目.我是C程序员,所以我不太擅长.NET,但是我们在C#上编写的这个项目遇到了一些问题.我正在使用DiscoveryClient查找本地

我正在研究在局域网中发现和控制网络摄像机的项目.我是C程序员,所以我不太擅长.NET,但是我们在C#上编写的这个项目遇到了一些问题.我正在使用DiscoveryClient查找本地网络中的所有设备.接下来,我获得摄像机地址,创建HttpClient并尝试发送SOAP操作. ONVIF规范:http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl.某些操作(例如GetServiceCapabilities)返回响应,但大多数操作都会返回此错误:

env:Sender
ter:NotAuthorized


The action requested requires authorization and the sender is not authorized



我正在像官方ONVIF文档(第35-36页)中那样创建SOAP请求. http://www.onvif.org/Portals/0/documents/WhitePapers/ONVIF_WG-APG-Application_Programmer‘s_Guide.pdf. “ admin”和“ 12345”-是我们测试网络摄像头的登录名和密码.

这是我尝试在下面发送请求的代码:

HttpClient httpClient = new HttpClient();
var byteArray = Encoding.UTF8.GetBytes("admin:12345");
var request = requestStructure.CreateSoapRequest();
httpClient.DefaultRequestHeaders.Add("SOAPACTION", "\"" + requestStructure.actionNamespace + "#" + requestStructure.actionName + "\"");
httpClient.DefaultRequestHeaders.Add("Authorization", "Digest " + Convert.ToBase64String(byteArray));
var resp = await httpClient.PostAsync(requestedUri, new StringContent(request, UnicodeEncoding.UTF8));
var respString = await resp.Content.ReadAsStringAsync();

由CreateSoapRequest()创建并返回的是我的SOAP请求:

public string CreateSoapRequest()
{
var nonce64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(this.nonce.ToString()));
var date64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(this.dateCreated));
var password64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(this.password));
SHA1 sha = new SHA1CryptoServiceProvider();
var passwordDigest = sha.ComputeHash(Encoding.UTF8.GetBytes(nonce64 + date64 + password64));
password64 = Convert.ToBase64String(passwordDigest);
this.requestBodyString =
" + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" "
+ "soap:encodinghttp://schemas.xmlsoap.org/soap/encoding/\">"
+ ""
+ ""
+ ""
+ "" + this.login + ""
+ "

" + password64 + ""
+ "" + nonce64 + ""
+ "" + this.dateCreated + ""
+ ""
+ ""
+ ""
+ ""
+ " + "xmlns:u=\"" + this.actionNamespace + "\">"
+ this.actionParameters
+ "
"
+ "
" +
"\r\n\r\n";
return this.requestBodyString;
}

谢谢你的帮助!

解决方法:

我最近在做很多Onvif的工作,发现设置安全凭证非常麻烦.
首先,我要确保您的日期格式如下所示:

var now = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddThh:mm:ss.fffZ");

与我的唯一区别(工作正常)是我在标题中多了一行:

string xml = string.Format(@""+
"" +
"" +
"" +
"" +
"{0}" +
"

" +
"{1}" +
"" +
"" +
"{2}" +
"
" +
"" +
"{3}" +
"
" +
"" +
"" +
"", user, credentials[0], b64Nonce, credentials[2]);

希望这可以帮助!


推荐阅读
  • PHP 5.4.8 编译安装指南
    本文详细介绍了如何在Linux环境下编译安装PHP 5.4.8,并配置为FastCGI模式运行。包括所需依赖包的安装、源代码下载、编译配置及启动服务等步骤。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 深入解析 Android 中的 ActivityGroup 实现
    本文详细探讨了如何在 Android 应用中使用 ActivityGroup 来实现类似微博客户端主界面的效果,并分析了 TabActivity 的局限性,推荐使用更为灵活的 ActivityGroup 方案。 ... [详细]
  • Oracle中打开10046Trace的各种方法10046trace的跟踪等级10046是一个Oracle的内部事件(event),通过设置这个事件可以得到Oracl ... [详细]
  • 优化Nginx中PHP-FPM模块配置以提升性能
    通过调整Nginx与PHP-FPM之间的配置,可以显著提高Web服务器处理PHP请求的速度和效率。本文将详细介绍如何针对不同的应用场景优化PHP-FPM的各项关键参数。 ... [详细]
  • 本文详细介绍了如何利用go-zero框架从需求分析到最终部署至Kubernetes的全过程,特别聚焦于微服务架构中的网关设计与实现。项目采用了go-zero及其生态组件,涵盖了从API设计到RPC调用,再到生产环境下的监控与维护等多方面内容。 ... [详细]
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • SSAS入门指南:基础知识与核心概念解析
    ### SSAS入门指南:基础知识与核心概念解析Analysis Services 是一种专为决策支持和商业智能(BI)解决方案设计的数据引擎。该引擎能够为报告和客户端应用提供高效的分析数据,并支持在多维数据模型中构建高性能的分析应用。通过其强大的数据处理能力和灵活的数据建模功能,Analysis Services 成为了现代 BI 系统的重要组成部分。 ... [详细]
  • 微服务架构详解及其入门指南
    本文详细介绍了微服务的基本概念、发展历程、与传统架构的区别及优势,并探讨了适合采用微服务架构的场景。此外,文章还深入分析了几个主流的微服务开发框架,特别是Spring Cloud的组成和特点。 ... [详细]
  • 本文探讨了在JavaScript中如何有效地从服务器控件DropDownList中获取绑定的ID值,而非仅仅是显示的文本值。这对于需要根据用户选择动态处理数据的应用场景非常有用。 ... [详细]
  • 1.选择一个翻译页面,我选择的是有道词典(http:dict.youdao.com)2.随便输入一个英语单词进行翻译,然后查看源文件,找到 ... [详细]
  • 在网络故障排查中,tcpdump 是一款强大的工具,尤其在 Linux 环境下。尽管开发环境中问题较少,但在测试或生产环境中,往往会遇到各种难以预料的异常情况。通过在问题发生的环境中启用 tcpdump 进行抓包,并重现问题,可以获取到宝贵的原始数据,为问题的诊断提供关键线索。本文将详细介绍如何使用 tcpdump 进行实战操作,帮助读者掌握这一技能。 ... [详细]
  • 《精通ArcGIS Server 应用与开发》——2.4 ArcGIS Server的安装与配置
    本节书摘来自异步社区《精通ArcGISServer应用与开发》一书中的第2章,第2.4节,作者:何正国,杜娟,毛海亚更多章节内容可以访问云栖社区“异步社 ... [详细]
author-avatar
用户9o05le1po7
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有