如何通过DLNA浏览群晖NAS目录?请求报-111:无效操作排查
问题:群晖NAS DLNA Browse请求返回
-111: Invalid Action 背景信息
尝试通过DLNA浏览群晖DS210j NAS目录,操作流程如下:
- 先发送GET请求获取设备XML信息:
http://192.168.1.5:50001/desc/device.xml,返回数据如下:
<?xml version="1.0" encoding="utf-8"?> <root xmlns="urn:schemas-upnp-org:device-1-0"> <specVersion> <major>1</major> <minor>0</minor> </specVersion> <device> <deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType> <dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMS-1.50</dlna:X_DLNADOC> <friendlyName>MY-NAS</friendlyName> <manufacturer>Synology Inc</manufacturer> <manufacturerURL>http://www.synology.com/</manufacturerURL> <modelDescription>Synology DLNA/UPnP Media Server</modelDescription> <modelName>DS210j</modelName> <modelURL>http://www.synology.com/</modelURL> <serialNumber>A2G6N03829</serialNumber> <UDN>uuid:00113206-3dd5-0011-d53d-d53d01234567</UDN> <presentationURL>http://192.168.1.5:5000/</presentationURL> <iconList> <icon> <mimetype>image/jpeg</mimetype> <width>120</width> <height>120</height> <depth>24</depth> <url>/tmp_icon/dmsicon120.jpg</url> </icon> <!-- 3 more icons here --> </iconList> <serviceList> <service> <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType> <serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId> <SCPDURL>/connmgrSCPD.xml</SCPDURL> <controlURL>/ConnectionManager/control</controlURL> <eventSubURL>/ConnectionManager/event</eventSubURL> </service> <service> <serviceType>urn:schemas-upnp-org:service:ContentDirectory:1</serviceType> <serviceId>urn:upnp-org:serviceId:ContentDirectory</serviceId> <SCPDURL>/cdsSCPD.xml</SCPDURL> <controlURL>/ContentDirectory/control</controlURL> <eventSubURL>/ContentDirectory/event</eventSubURL> </service> <service> <serviceType>urn:microsoft.com:service:X_MS_MediaReceiverRegistrar:1</serviceType> <serviceId>urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar</serviceId> <SCPDURL>/msrrSCPD.xml</SCPDURL> <eventSubURL>/MediaReceiverRegistrar/event</eventSubURL> <controlURL>/MediaReceiverRegistrar/control</controlURL> </service> </serviceList> </device> </root>
- 执行以下curl请求尝试浏览根目录:
curl --location 'http://192.168.1.5:50001/ContentDirectory/control' \ --header 'SOAPAction: urn:schemas-upnp-org:service:ContentDirectory:1#Browse' \ --header 'Content-Type: text/xml; charset="utf-8"' \ --data '<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>1000</RequestedCount> <SortCriteria></SortCriteria> </u:Browse> </s:Body> </s:Envelope>'
但返回错误:-111: Invalid Action。尝试移除SOAPAction中的#Browse或仅发送#Browse,问题依旧。服务器环境为Linux/2.6.32.12, UPnP/1.0, Portable SDK for UPnP devices/1.6.18。
问题原因
- SOAPAction格式不符合UPnP 1.0规范:UPnP 1.0要求SOAPAction的值必须用双引号包裹,原请求未添加引号,导致PUPnP 1.6.18 SDK无法正确解析动作。
- SOAP编码风格不兼容:原请求使用了SOAP编码风格(
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"),但群晖DLNA服务器仅支持文档字面量风格,不支持编码风格,导致动作解析失败。 - Content-Type参数冗余:charset值多余的双引号可能引发解析异常。
解决方法
修正后的curl请求
curl --location 'http://192.168.1.5:50001/ContentDirectory/control' \ --header 'SOAPAction: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"' \ --header 'Content-Type: text/xml; charset=utf-8' \ --data '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <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>1000</RequestedCount> <SortCriteria></SortCriteria> </u:Browse> </s:Body> </s:Envelope>'
关键修改点
- SOAPAction添加双引号:给完整URN加上双引号,严格匹配UPnP 1.0规范。
- 移除encodingStyle属性:删除SOAP Envelope中的编码风格声明,改用服务器支持的文档字面量风格。
- 简化Content-Type:去掉charset值的双引号,避免解析歧义。
额外验证步骤:可以先请求http://192.168.1.5:50001/cdsSCPD.xml获取ContentDirectory服务的SCPD文档,确认Browse动作的定义和参数要求,确保请求参数完全匹配。
内容的提问来源于stack exchange,提问作者LA_
相关产品推荐
相关产品推荐

