Python: SOAP API не работает, что я делаю не так? - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь использовать SOAP API от movildata.com, чтобы получить последнее местоположение автомобиля, используя IMEI и ключ API, вот мой код:

import requests

api_key = 'xxxxxxxxx'
imei = 'xxxxxxxxx'

request = """<?xml version = "1.0" encoding = "utf-8"?>
<soap12: Envelope xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns: xsd = "http://www.w3.org/2001/XMLSchema" xmlns: soap12 = "http://www.w3.org/2003/05/soap-envelope">
  <soap12: Body>
    <getLastLocation xmlns = "http://ws.movildata.com/ws/wsUsers">
      <apikey> {0} </ apikey>
      <IMEI> {1} </ IMEI>
    </ getLastLocation>
  </ soap12: Body>
</ soap12: Envelope>
""".format(api_key, imei)

encoded_request = request.encode('utf-8')

headers = {"Host":"ws.movildata.com",
            "Content-Type": "application/soap+xml; charset=utf-8",
            "Content-Length":str(len(encoded_request))
            }

response = requests.post(url='https://ws.movildata.com/wsUsers.asmx?op=getLastLocation', 
                         headers=headers,
                         data=encoded_request
                         )

print(response.content)
print(response.status_code)

Возвращает ответ XML и статус HTTPкод 500

мыло: ReceiverEl servidor no puede processar la solicitud.---> Un nombre no puede empezar con el car \ xc3 \ xa1cter \ '\', доблесть шестнадцатеричное 0x20.L \ xc3 \ xadnea 2, posici \ xc3 \ xb3n 9.

Я перевёл с испанского и там написано что-то похожее на

Сервер не может обработать запрос.--- & gt;Имя не может начинаться с символа '';

Я убедился, что в request нет ненужного пустого пространства, но это, похоже, ничего не меняет, какие-либо идеи о том, что яможет быть не так?

1 Ответ

0 голосов
/ 25 февраля 2019

Я видел несколько ошибок вашего форматирования XML.Попробуйте исправить их, как сказано ниже.Если ошибка по-прежнему появляется, прокомментируйте ниже.

Сначала в объявлениях пространства имен в элементе <soap12: не должно быть пробелов между xmlns и xsi.

исправить всеиз них: xmlns:xsi, xmlns:xsd и xmlns:soap12

В <getLastLocation у вас только что было xmlns без имени переменной.Некоторые парсеры могут не принять это.Дайте какое-нибудь фиктивное имя (например: xmlns:abc).

В закрывающих элементах у вас есть пробел между </ и именем элемента.

Исправьте все ниже:

</getLastLocation>

</soap12:Body> (Также удалите пробел между : и Body)

</soap12:Envelope> (Также удалите пробел между : и Envelope)

...