flutter - 颤振应用程序使用摘要身份验证连接到 ip 相机
问题描述
我正在尝试在我的网络摄像机上传递摘要身份验证,我在 Flutter 上执行此操作,但实际上没关系。我收到来自相机的 http 响应,状态码为 401 Not Authorized 和标头:
{content-type: text/html, pragma: no-cache, cache-control: no-cache, www-authenticate: Digest
realm="goAhead", domain=":13237",qop="auth", nonce="a98326cc6022c2a2b7cc7e57a5956f77",
opaque="5ccc069c403ebaf9f0171e9517f40e41",algorithm="MD5", stale="FALSE", date: Thu Dec 26 16:31:43
2019, server: GoAhead-Webs}
从这里的源代码中,我找到了所需的响应构造函数视图,如下所示:
var mResponse = "Digest username=\"$username\", realm=\"$realm\", nonce=\"$nonce\", uri=\"$uri\",
response=\"$_response\", cnonce=\"$cnonce\", nc=$nc, qop=\"$qop\"";
我创建了这个:
Digest username="admin", realm="goAhead", nonce="a98326cc6022c2a2b7cc7e57a5956f77",
uri="/onvif/device_service", response="5313fe5265efcd3da37cec322d92ebd7", cnonce="1234567890",
nc=00000001, qop="auth"
并向相机发送http请求:
Future<http.Response> new_response = http.post(snapshotUrl, headers: {"Content-Type":"text/xml; charset=utf-8", "Authorization": mResponse }, body: mGetSnapshotUriAuth);
new_response.then((resp){
print(resp.statusCode);
});
并收到此错误:
[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: Invalid header field name
当我删除标题的“授权”字段时,相机响应 401 代码。我正在尝试从适用于 Onvif 协议的 ip camera 获取快照。我不确定 Uri 参数。当我尝试在台式机屏幕截图上通过 http 客户端发送此 http 请求时出现相同的错误
问题 2:当我尝试将 uri 参数更改为其他内容时,例如:
String uri = http://www.onvif.org/ver10/media/wsdl/GetSnapshotUri";
我的相机停止回复我。当我开始使用 Http 嗅探器或更改 Digest 的响应的字段名称时,我可以看到相同的行为。有时重置相机会有所帮助(甚至是硬重置)并且它会再次开始工作(返回 401 错误),有时它会自行开始工作。但顺便说一句,相机通过其他相机查看器应用程序继续工作。 我的 http 嗅探器截图
PS 经过多次测试来解决这个问题,我认为我的参数值是正确的,因为如果更改某些内容,例如用户名、密码等(除了 cnonce。当我更改 сnonce 结果相同),我得到其他错误:401。
解决方案
手工编写 SOAP 请求是不好的做法。我对 dart 一无所知,但我邀请您寻找像 gsoap 这样的工具,用于从您可以在此处找到的 thw WSDL 文件生成函数。不要手动编写请求,解析响应时会一团糟。
推荐阅读
- python-3.x - 如何让 Salesforce REST API 进行分页?
- jasper-reports - 在运行时将 PNG 添加到 .jasper 文件
- angular - Angular 8 和 NestJS
- mysql - 根据 parent_id 通过跳过前 5 条记录来选择子行
- python - 有没有办法交叉引用 csv 文件中的两行而不将文件加载到内存中
- excel - VBA 编译错误 - 预期 If 或 Select 或 Sub 或 Function 或 End of statement
- asp.net - 在 AspxButton 上添加值属性
- node.js - 部署节点 js 应用程序以更新数据后出现内部服务器错误
- sas - 使用函数将值放入文件而不创建新变量
- dialog - azure Webchat 中的 Microsoft Bot 框架错误