xml - UPnP 架构的 SOAP 实现

标签 xml linux curl soap upnp

我正在尝试实现 UPnP AV 控制点。我完成了架构的描述阶段。为了从浏览操作中获取服务器的内容,我使用了如下的 CURL 命令。

curl -o response.xml -H "Host: 192.168.1.47:2869"-H "Content-Type: text/xml; Charset="UTF-8""-H "SOAPAction: "http://192.168.1.47:2869/upnphost/udhisapi.dll?content=uuid:67240e36-10e0-45f6-9c4b-e18cdd53360e ""-d @request.xml -X POST http://192.168.1.47:2869/upnphost/udhisapi.dll?control=uuid:99261858-3c45-41b5-87fd-3f30b4700005+urn:upnp-org:serviceId:ContentDirectory

SOAPAction下的URL是服务器的服务描述url。 POST后的URL是服务器的控制URL。

我的request.xml如下:

   <?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">
        <s:Body>
           <u:Browse xmlns:u="urn:schemas-upnp-org:Service:ContentDirectory:1">
                   <ObjectID>"0"</ObjectID>
                   <BrowseFlag>"BrowseDirectChildren"</BrowseFlag>
                   <Filter>"*"</Filter>
                   <StartingIndex>0</StartingIndex>
                   <RequestedCount>3</RequestedCount>
                   <SortCriteria>""</SortCriteria>

           </u:Browse>
    </s:Body>
    </s:Envelope>

`

我得到的响应 XML 不包含我需要的正文内容。响应 xml 是:

    <s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <s:Body>
       <s:Fault>
           <faultcode>s:Client</faultcode>
           <faultstring>UPnPError</faultstring>
           <detail>
              <UPnPError>
                  <errorCode>401</errorCode>
                   <errorDescription>Invalid Action</errorDescription>
              </UPnPError>
           </detail>
    </s:Fault>
    </s:Body>
    </s:Envelope>

如何获取服务器的内容。

最佳答案

Soapaction 应该是您要调用的操作的完整指定标识符。您正在发送一个指向服务描述的 URL。以下应该工作得更好:

SOAPACTION: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"

您的 xml 也可能无效,尖括号似乎不匹配。我还会检查 Browse 参数值的引号:我认为它们都不应该被引号。

关于xml - UPnP 架构的 SOAP 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39909875/

相关文章:

jquery解析xml

xml - 无法读取请求 xml 正文元素值

c - 使用 getsockname() 获取我自己的 IP 地址

linux - 为目录中的每个文件运行 shell 脚本

php - 与 mail.google.com、cURL 和 http ://validator. w3.org/checklink 混淆

python - pycurl.POSTFIELDS 的问题

php - 使用 cURL 将 Json 数据发送到另一台服务器

android - 是否可以在不使用 XML 资源的情况下使用 PreferenceFragment 创建首选项屏幕?

java - 如何使用 SAX 解析器处理 namespace ?

c - 我在这个非常基本的 C 代码中得到一个 "Error: Can' t Open Display,但我不明白为什么