Запрос/Получение данных по протоколу soap в python

IRoman1987

Новичок
Пользователь
Мар 3, 2021
1
0
1
Доброго времени суток!

Являюсь новичком в Python. Стоит задача сделать запрос к web сервису по протоколу soap: т.е. отправить xml запрос с параметрами, и получить ответ. На тестовом сервере на Win2003 удалось это реализовать - запрос отправил - ответ получил (запускаю скрипт и получаю данные в cmd).
Но!!! Когда переношу это на сервер с Win2016 абсолютно ничего не меняя в коде(версия python та же), то получаю такую ошибку

Traceback (most recent call last):
File "etran21.py", line 41, in <module>
print(response.content.decode('utf-8'))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 197: invalid continuation byte

Код скрипта:
Python:
import requests


nomvag = [29136330,29136348,29136355,29136363]



endpoint = "http://адрес сервиса"


for nomvags in nomvag:

 

    body="""

    <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="SysEtranInt">

       <soapenv:Header/>

       <soapenv:Body>

          <sys:GetBlock soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

             <Login xsi:type="xsd:string">Логин пользователя</Login>

             <Password xsi:type="xsd:string">password</Password>

             <Text xsi:type="xsd:string">

       &lt;GetInform&gt;&lt;ns0:getReference21ASU xmlns:ns0="http://service.siw.pktbcki.rzd/"&gt;

      &lt;ns0:Reference21ASURequest&gt;

        &lt;idUser&gt;0&lt;/idUser&gt;

        &lt;idReference&gt;21&lt;/idReference&gt;

        &lt;vagons&gt;

            &lt;vagon&gt;"""+(str(nomvags))+"""&lt;/vagon&gt;

    

        &lt;/vagons&gt;

      &lt;/ns0:Reference21ASURequest&gt;

    &lt;/ns0:getReference21ASU&gt;

    &lt;/GetInform&gt;

             </Text>

          </sys:GetBlock>

       </soapenv:Body>

    </soapenv:Envelope>

    """

    

    body = body.encode('utf-8')

    session = requests.session()

    session.headers = {"Content-Type": "text/xml; charset=utf-8"}

    session.headers.update({"Content-Length": str(len(body))})

    response = session.post(url=endpoint, data=body, verify=False)


    print(response.content.decode('utf-8'))


Логин пользователя - логин на русском языке (как мне кажется именно в нем проблема), password - пароль на английском.
Подскажите, пожалуйста, в чем проблема? Пробовал разные кодировки, перелопатил (как мне кажется), весь инет - но ответа не нашел...
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
логин на русском языке (как мне кажется именно в нем проблема)
ну попробуйте поменять его...
ошибка кодировки возникает, в основном такая ошибка из за не латинских символов...
 

Форум IT Специалистов