Отправка запроса XML Soap с использованием Python request.post () - PullRequest
0 голосов
/ 18 сентября 2018

Я уверен, что я делаю все это неправильно, так как я ничего не знаю о Xml или SOAP, но я пытаюсь отправлять запросы SOAP с использованием Python request.post ().Я подумал, что могу просто передать тело в виде простого текста.Если я использую data=body, я получаю ошибку декодирования, говоря, что Latin-1 не может быть использован, хотя я думал, что я поставил декодирование для utf-8.Если я использую params=body запрос успешен, но он говорит, что у меня есть недопустимый элемент Root.Как мне разобрать следующий XML-документ?Я просто пытаюсь передать процесс аутентификации в соответствии с этими инструкциями: https://developer.stamps.com/developer/docs/swsimv71.html#authentication

Здесь находится элемент xml Tree: https://swsim.testing.stamps.com/swsim/swsimv71.asmx?wsdl

Я использовал следующий код для попытки отправки запроса наотправить мои учетные данные для аутентификации.Если бы вы могли сообщить мне, где и как сильно я испорчу этот запрос, я был бы признателен.

url = "https://swsim.testing.stamps.com/swsim/swsimv71.asmx"

headers = {
    'User-Agent': 'Crosscheck Networks SOAPSonar',
    'content-type': 'text/xml',
    'charset': 'utf-8'
}

body = """
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:tns=“http://stamps.com/xml/namespace/2018/03/swsim/swsimv71”
>

    <soap:Body>

        <AuthenticateUser>

            <tns:Credentials>

                <IntegrationsID>
                    ID
                </IntegrationsID>

                <Username>
                    USERNAME
                </Username>

                <Password>
                    PASSWORD
                </Password>

            </tns:Credentials>

        </AuthenticateUser>

    </soap:Body>
</soap:Envelope>

"""

r = requests.post(url, headers=headers, params=body)
print(r.content)

1 Ответ

0 голосов
/ 20 сентября 2018

Я думаю, это может помочь тебе, мой друг!

    import requests

    request = '''
    <?xml version="1.0" encoding="UTF-8"?>
    <Requ>
    <GivenName>Özdemam</GivenName>
    <FamilyNameGrünzl</FamilyName>
    </Requ>
    '''.encode('utf-8')
    headers = {'Content-Type': 'text/xml': 'charset=utf-8'}
    req = requests.Request('POST', 'http://192.168.1.5:8888/api',
                   headers=headers,
                   data=request)

    prepped_requ = req.prepare()
    s = requests.Session()
    http_response = s.send(prepped_requ)
    print http_response
...