如何订阅 UPnP 事件
本文关键字:事件 UPnP 何订阅 | 更新日期: 2023-09-27 18:36:53
对于大多数人来说,这确实应该是一个简单的HttpRequestMessage
问题。我正在尝试向 UPnP 设备发送订阅请求,如 UPnP 设备体系结构文档的第 4.1.2 节中所述,我需要发送的消息应如下所示:
SUBSCRIBE publisher path HTTP/1.1
HOST: publisher host:publisher port
USER-AGENT: OS/version UPnP/1.1 product/version
CALLBACK: <delivery URL>
NT: upnp:event
TIMEOUT: Second-requested subscription duration
显然,其中大部分都非常简单。我有一些问题,因为我当前的方法不起作用。我收到从服务器返回的NotFound
。
请求行订阅发布者路径 HTTP/1.1 是否与我创建 WebRequest ( WebRequest.Create(...)
) 时相同,或者是否有我可以设置的属性?
在这种情况下,SUBSCRIBE
HttpMethod
还是Get
、POST
、PUT
等?
下面是当前的请求代码:
var request = WebRequest.Create(new Uri(eventUri)) as HttpWebRequest;
request.Method = "SUBSCRIBE";
request.UserAgent = "MyTab/1.0 UPnP/1.1 TestApp/1.0";
request.Headers["CALLBACK"] = "<" + hostname.DisplayName + ":8088>";
request.Headers["NT"] = "upnp:event";
request.Headers["TIMEOUT"] = "Second-300";
看起来我完全正确,只是我忘了将http://
附加到回调 url。
对于登陆这里并想知道 UPNP 订阅如何工作的其他人。这是一个非常简化的使用示例。
我将使用 netcat 打开一个端口并使用 HTTP 200 响应传入事件。为了初始化连接,我将使用 curl。这适用于预装 curl 和 nc 的 Ubuntu 19.10。
curl -v http://192.168.1.47:58424/RenderingControl/evt -H "CALLBACK: <http://192.168.1.32:1234>" -H "NT: upnp:event" -H "TIMEOUT: Second-1800" -X SUBSCRIBE
此处http://192.168.1.47:58424/RenderingControl/evt
是要注册到事件的设备特定 URL。CALLBACK
标头指定运行 netcat 服务器的端口和 IP 地址。如前所述,在这里添加http://
很重要。
侦听并发送 HTTP OK 的服务器运行如下:
while true; do echo -e 'HTTP/1.1 200 OK'r'nContent-length: 0'r'nConnection: close'r'n'r'n' | nc -l 1234; done