#django #xml #soap #django-rest-framework #python-requests
#django #xml #soap #django-rest-framework #python-запросы
Вопрос:
Мои XML-данные:
xml_payload =
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<Authentication >
<username>blabla</username>
<password>123456789</password>
</Authentication>
</soap:Header>
<soap:Body>
<data>
<title>Test title</title>
<content>Test body format</content>
</data>
</soap:Body>
</soap:Envelope>
Мой запрос в проекте django:
try:
url = "http://someurls.com"
res = requests.post(url=url, data=xml_payload, headers={'Content-type': 'application/xml'})
return response.content, response.status_code
except Exception as e:
print(e)
return None, 500
Когда я отправляю запрос с помощью postman, я получаю ответ, приведенный ниже:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Error reading XMLStreamReader.</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>'
Он возвращает ошибку. Я просматриваю Интернет, но не нашел ответа, который выполнил бы мой запрос.
Комментарии:
1. Это может быть параметр (params=xml_payload)?
2. @MatteoBianchi Нет
Ответ №1:
Попробуйте передать полезную нагрузку xml следующим образом:
xml_payload = """<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<Authentication >
<username>blabla</username>
<password>123456789</password>
</Authentication>
</soap:Header>
<soap:Body>
<data>
<title>Test title</title>
<content>Test body format</content>
</data>
</soap:Body>
</soap:Envelope>"""
Ответ №2:
Спустя несколько дней я наконец нашел ответ. Когда я создаю полезную нагрузку xml с помощью python, python незаметно добавляет » n» в конце каждой строки. Поэтому, когда я заменил эти » n», я отлично работаю.
xml_payload = xml_payload.replace("n", "")