3

对于大多数人来说,这应该是一个简单的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从服务器得到一个返回。

请求行 SUBSCRIBE 发布者路径 HTTP/1.1是否与我创建 WebRequest ( ) 时相同,WebRequest.Create(...)或者是否有我可以设置的属性?

SUBSCRIBEHttpMethod这种情况下还是这是 a Get,POSTPUT

这是当前的请求代码:

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";
4

2 回答 2

3

看起来我一切都正确,除了我忘记将 附加http://到回调 url。

于 2013-10-25T01:55:59.493 回答
1

对于登陆这里并想知道 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
于 2020-02-09T16:54:33.443 回答