【问题标题】:How to subscribe to UPnP events如何订阅 UPnP 事件
【发布时间】:2013-11-03 22:56:34
【问题描述】:

对于大多数人来说,这应该是一个简单的HttpRequestMessage 问题。我正在尝试按照UPnP Device Architecture doc 的第 4.1.2 节所述向 UPnP 设备发送订阅请求,我需要发送的消息应该如下所示:

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

【问题讨论】:

    标签: c# http-headers httprequest upnp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      对于那些登陆这里并想知道 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多