Ответ SOAP только дает мне 1% содержимого файла - PullRequest
0 голосов
/ 15 января 2019

У меня очень простой SOAP-запрос, который я отправляю на сервер.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <web:RetrieveDocRequest>
         <F_FOLDER>folderName</F_FOLDER>
         <F_USER>userName</F_USER>
         <F_PASSWORD>psw</F_PASSWORD>
         <F_DOC_ID>111222333</F_DOC_ID>
      </web:RetrieveDocRequest>
   </soapenv:Body>
</soapenv:Envelope>

Ответ, который я ожидаю, представляет собой файл размером 35 МБ . Вместо этого то, что я получаю, выглядит примерно так:

Transfer-Encoding   chunked
#status#    HTTP/1.1 200 OK
Content-Language    en-US
Date    Fri, 11 Dec 2018 19:45:17 GMT
X-Powered-By    Servlet/3.0
Content-Type    text/xml; charset=UTF-8

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <a:RetrieveCompanyResponse xmlns:a="http://somewebservice.company.morecompany.com/">
            <documentStream>AF3xQEBAQEBAQEBAQEBA...</documentStream>
        <a:RetrieveCompanyResponse>
    </soap:Body>
</soap:Envelope>

Когда я анализирую documentStream и записываю его в файл, используя python, я замечаю, что файл имеет размер 350 КБ , что означает, что мне все еще не хватает около 99% файла.

Могу ли я что-нибудь сделать с SOAP-запросом, чтобы я мог загрузить весь файл или постоянно отправлять мне несколько documentStream, которые я могу записать во временный файл?

Кроме того, есть что-то, что я особенно делаю неправильно, например, не отправляю определенные заголовки?

РЕДАКТИРОВАТЬ: пример кода Python

from zeep import Client
import codecs

wsdl = "http://webservice/service/ServicesPort?wsdl"
f = open('tmpFile.txt', 'wb')

client = Client(wsdl)

result = client.service.RetrieveDoc(
    'folderName',
    'userName',
    'psw',
    '111222333'
)

print len(result) # Ends up being around 240,394
tmpTxt = codecs.decode(result, 'cp500')
tmpTxt = tmpTxt.encode('utf-8')
txtArr = tmpTxt.split('\x00')
# Writes about 350 KB worth of data
for line in txtArr:
    f.write(line)
...