对于大多数人来说,这应该是一个简单的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";发布于 2013-10-25 01:55:59
看起来这一切都是正确的,但我忘了将http://附加到回调url中。
发布于 2020-02-09 16:54:33
对于其他在这里登陆并想知道UPNP订阅是如何工作的人来说。这是一个非常简化的用法示例。
我将使用netcat打开一个端口,并使用HTTP 200响应传入的事件。要初始化连接,我将使用curl。这工作在一个Ubuntu19.10预装卷曲和nc。
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的服务器运行如下:
while true; do echo -e 'HTTP/1.1 200 OK\r\nContent-length: 0\r\nConnection: close\r\n\r\n' | nc -l 1234; donehttps://stackoverflow.com/questions/19579409
复制相似问题