#xml #linux #curl #soap #upnp
#xml #linux #curl #soap #upnp
Вопрос:
Я пытаюсь реализовать контрольную точку UPnP AV. я завершил этап описания архитектуры. Чтобы получить содержимое сервера из действия просмотра, я использую команду CURL, как показано ниже.
curl -o response.xml -H «Хост: 192.168.1.47:2869» -H «Тип содержимого: текст / xml; Кодировка =»UTF-8″» -H «SOAPAction: «http://192.168.1.47:2869/upnphost/udhisapi.dll?content=uuid:67240e36-10e0-45f6-9c4b-e18cdd53360e «» -d @request.xml -X СООБЩЕНИЕ http://192.168.1.47:2869/upnphost/udhisapi.dll?control=uuid:99261858-3c45-41b5-87fd-3f30b4700005 urn:upnp-org:serviceId:ContentDirectory
URL-адрес в SOAPAction — это URL-адрес описания службы сервера. URL-адрес после POST является управляющим 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>
Как мне получить содержимое сервера.
Ответ №1:
Soapaction должен быть полностью указанным идентификатором действия, которое вы хотите вызвать. Вместо этого вы отправляете URL-адрес в описание службы. Следующее должно работать лучше:
SOAPACTION: "urn:schemas-upnp-org:service:ContentDirectory:1#Browse"
Ваш xml также может быть недействительным, угловые скобки, похоже, не совпадают. Я бы также проверил цитирование значений аргумента Browse: я считаю, что ни одно из них не должно заключаться в кавычки.
Комментарии:
1. я изменил soapaction. теперь моя ошибка — недопустимые аргументы.
2. Посмотрите на ‘<‘ и ‘>’, которые вы используете для вложения
s:envelope
, и их атрибуты. Кажется, есть дополнительный ‘>’.3. Проверьте спецификацию ContentDirectory: я предполагаю
BrowseFlag
, что значение (в вашем случае BrowseDirectChildren) не должно заключаться в кавычки, потому что это не строка, а перечисление.4. @jku
BrowseFlag
— это строка. Перечисление в этом случае представляет собой просто строку с allowedValueList, которая определяет набор допустимых строковых входных данных.5. simonc верен. Я предполагаю, что причина, по которой мне это показалось неправильным, заключается в том, что ни одно из значений переменных не должно заключаться в кавычки.