Задать вопрос
@Tanya2289

Почему не отправляется SOAP-запрос?

Хочу отправить SOAP-запрос в Python, но выдает ошибку:
TypeError: string indices must be integers, not 'str
'

Код:
def test():
    wsdl_url = "http://блаблаблабла/?singleWsdl"

    # structured XML
    xml_data = '''<soapenv:Envelope xmlns:soapenv="http://блаблаблабл.xmlsoap.org/soap/envelope/"  xmlns:obj="http://блаблаблабл/objects">
          <soapenv:Header/>
          <soapenv:Body>
             <obj:GetOutgoingTrafficRequest>
                <!--Optional:-->
                <obj:parameter>
                   <!--Optional:-->
                   <obj:messageInfo>
                      <!--Optional:-->
                      <obj:type>outgoingTrafficRequest </obj:type>
                      <!--Optional:-->
                      <obj:version>1.1</obj:version>
                      <!--Optional:-->
                      <obj:messageID>блаблаблабл</obj:messageID>
                      <!--Optional:-->
                      <!--Optional:-->
                      <obj:senderID>101</obj:senderID>
                      <!--Optional:-->
                      <obj:senderName>блаблаблаблт</obj:senderName>
                      <!--Zero or more repetitions:-->
                      <obj:receiverID>201</obj:receiverID>
                   </obj:messageInfo>
                </obj:parameter>
             </obj:GetOutgoingTrafficRequest>
          </soapenv:Body>
       </soapenv:Envelope>'''

    # Создаем объект Session для работы с заголовками
    session = Session()

    # Устанавливаем нужные заголовки
    session.headers.update({
        'Content-Type': 'text/xml; charset=utf-8;', 'SOAPAction': 'urn:GetOutgoingTraffic',
        'Accept-Encoding': 'gzip,deflate', 'Content-Length': '1019', 'Host': 'блаблаблабл'
                })

    # Создаем объект клиента SOAP
    client = zeep.Client(wsdl=wsdl_url, transport=Transport(session=Session()))

    # Вызываем операцию GetCustomerData, передавая XML-данные
    response = client.service.GetOutgoingTraffic(xml_data)
    print(response)
  • Вопрос задан
  • 75 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 1
borisdenis
@borisdenis
Ленив и вреден...
TypeError: string indices must be integers, not 'str'

Код ждет число, а вы ему текст. Возможно где-то вы число в кавычки взяли и оно передалось как строка.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы