【问题标题】:uPnp SetAVTransportURI Missing SOAP action headeruPnp SetAVTransportURI 缺少 SOAP 操作标头
【发布时间】:2016-08-29 09:20:03
【问题描述】:

我正在使用bubbleUpnp 并查看一般的uPnp。我已经发布了一个 urn:schemas-upnp-org:device:MediaRenderer:1 发现,应用程序会通知它的功能。

第一个问题是我在不同的设备上安装了 xmbc,ps3、ps4 都可以互相看到,但只有 bubbleUpnp 和我的路由器回复(这适用于 ssdp:all to)。

尝试在 bubbleUpnp 上设置 AVTransportURI,但我不断收到 uPnp 错误

<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <s:Fault>
            <faultcode>s:Client</faultcode>
            <faultstring>UPnPError</faultstring>
            <detail>
                <UPnPError xmlns="urn:schemas-upnp-org:control-1-0">
                    <errorCode>401</errorCode>
                    <errorDescription>No action by that name at this service. Missing SOAP action header.</errorDescription>
                </UPnPError>
            </detail>
        </s:Fault>
    </s:Body>
</s:Envelope>

但是从 charles 那里抓取标题显示它在那里。

POST
/dev/9bfe134f-b027-52f3-ffff-ffffaae644dd/svc/upnp-org/AVTransport/
action HTTP/1.1 Host    192.168.1.65:58645 Accept   */*
Accept-Encoding gzip, deflate Content-Length    429
Content-Type    text/xml; charset=utf-8 Accept-Language en-us
soapaction  urn:schemas-upnp-org:service:AVTransport:1#
SetAVTransportURI Connection    keep-alive
User-Agent  channelListingTest/1 CFNetwork/758.3.15 Darwin/15.4.0

这是肥皂请求

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <s:Body>
        <u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">
            <InstanceID>0</InstanceID>
            <CurrentURI>http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4</CurrentURI>
            <CurrentURIMetaData />
        </u:SetAVTransportURI>
    </s:Body>
</s:Envelope>

在查尔斯的肥皂标签下,我觉得还可以

SetAVTransportURI   Method  
Parameters  Element 
[InstanceID: null]  Element 0
[CurrentURI: null]  Element http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4
[CurrentURIMetaData: null]  Element

这可能是我在使用 soap/upnp 方面的经验,有什么突出的吗?

干杯

编辑这里的代码以发送请求。

                var request = new XMLHttpRequest();
                request.open("POST", "http://192.168.1.65:58645/dev/9bfe134f-b027-52f3-ffff-ffffaae644dd/svc/upnp-org/AVTransport/action");

                request.onreadystatechange = function() {
                        console.log(request.responseText)
                };

                let setAVTransport = '<?xml version="1.0" encoding="utf-8"?>' +
                                        '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' +
                                                '<u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">' +
                                                    '<InstanceID>0</InstanceID>' +
                                                      '<CurrentURI>http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4</CurrentURI>' +
                                                    '<CurrentURIMetaData></CurrentURIMetaData>' +
                                                '</u:SetAVTransportURI>' +
                                            '</s:Body>' +
                                        '</s:Envelope>';

            request.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
            request.setRequestHeader("SOAPAction", "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI");

                request.send(setAVTransport);

【问题讨论】:

  • 请按照线路上看到的完全相同的方式粘贴标题,目前无法判断它们是否正确(例如是否引用了肥皂动作值,或者它是否在一行中正确)跨度>
  • 嗨,谢谢,这是代码 - 我认为这可能是我在开发机器上的网络设置,因为 kodi 没有看到任何东西(除了 bubbleupnp)。

标签: soap xmlhttprequest action upnp dlna


【解决方案1】:

我不能保证这是真正的问题,但 SOAPAction 值应该用双引号括起来(不要问我,我认为这也没有任何意义)。

试试这样的:

request.setRequestHeader("SOAPAction", "\"urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI\"");

一般来说,我建议检查网络上的实际消息(wireshark 是一个很棒的工具),并将它们与正常工作的客户端发送的消息进行比较。

【讨论】:

  • 谢谢,我觉得代码实际上很好——在搜索请求中,我没有在最后一个参数上添加“\r\n”。完成此操作后,我可以看到每个 upnp。发布的代码现在可以与 kodi 和其他人一起使用(之前的搜索只应该是 bubblepnp),但 bubblepnp 仍然呻吟着哈哈。它是一个开始! ,谢谢你的时间:-)。是的,wireshark 帮我找到那个错误 :-) 再次感谢!
  • 很高兴听到这个消息。我不想成为一个杀手,但代码与一个实现一起工作的事实并不意味着它很好。如果您将soap消息发送到正确的主机并且它以401响应,那么显然仍然存在问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 2017-04-14
  • 2013-02-15
  • 1970-01-01
相关资源
最近更新 更多