对于大多数人来说,这应该是一个简单的HttpRequestMessage
问题。我正在尝试向UPnP设备发送订阅请求,如UPnP Device Architecture doc的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(...)
)时相同,或者我可以在哪里设置属性?
在这种情况下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";
答案 0 :(得分:3)
看起来我已经完全正确了,除了我忘了将http://
附加到回调网址。
答案 1 :(得分: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