[英]How to subscribe to UPnP events
對於大多數人來說,這應該是一個簡單的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(...)
) 時相同還是我可以在某處設置屬性?
在這種情況下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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.