Неожиданный символ при отправке SOAP-запроса из Linux - PullRequest
1 голос
/ 10 июня 2019

Я пытался отправить запрос SOAP.

curl -X POST -H "Content-Type: text/xml" -H "SOAPAction: " --data-binary file.xml  https://endpoint.com

Я указал тело запроса в xml-файле как -

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dse="http://brandmaker.com/webservices/dse/v2/">
 <soapenv:Header/>
  <soapenv:Body>
    <dse:findById>
      <id>1405</id>
    </dse:findById>
  </soapenv:Body>
</soapenv:Envelope>

Этот файл отлично работает, когда я отправляю запрос с Mac. Однако, когда я скопировал файл с Mac в Linux и попробовал ту же команду, я столкнулся с ошибкой недопустимого символа -

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body> . 
     <soap:Fault>
        <faultcode>soap:Client</faultcode>
        <faultstring>Error reading XMLStreamReader: Unexpected character 'f' (code 102) in prolog; expected '&lt;' at [row,col {unknown-source}]: [1,1]</faultstring>
     </soap:Fault>
   </soap:Body>
</soap:Envelope>%  

Я пытался экранировать контент, но по-прежнему получаю ту же ошибку -

&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:dse=&quot;http://brandmaker.com/webservices/dse/v2/&quot;&gt;
   &lt;soapenv:Header/&gt;
   &lt;soapenv:Body&gt;
     &lt;dse:findById&gt;
       &lt;id&gt;1405&lt;/id&gt;
     &lt;/dse:findById&gt;
   &lt;/soapenv:Body&gt;
&lt;/soapenv:Envelope&gt;

Кто-нибудь может мне помочь? Как мне следует кодировать тело запроса xml при отправке запроса из Linux?

1 Ответ

1 голос
/ 11 июня 2019

Скорее всего, он отправляет POST-данные, содержащие буквенный текст file.xml.

Попробуйте:

curl -X POST \
-H "Content-Type: text/xml" \
-H "SOAPAction: " \
--data-binary @file.xml \
https://endpoint.com

Для Linux документация для --data-binary гласит:

--data-binary <data>
    (HTTP) This posts data exactly as specified with no extra processing whatsoever.

    If you start the data with the letter @, the rest should be a filename.
    Data is posted in a similar manner as --data-ascii does, except  that  newlines
    and carriage returns are preserved and conversions are never done.

    If this option is used several times, the ones following the first will
    append data as described in -d, --data.
...