Python:SOAP API无法正常工作,我在做什么错?

时间:2019-02-25 17:46:53

标签: python xml api soap python-requests

我正尝试使用IMEI和api密钥使用movildata.com的SOAP 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

  

soap:ReceiverEl servidor no puede procesar la solicitu。 --->联合国   nombre no puede empezar con el car \ xc3 \ xa1cter \'\',英勇   十六进制0x20。 L \ xc3 \ xadnea 2,posici \ xc3 \ xb3n   9。

我从西班牙语翻译而成,上面写着

  

服务器无法处理请求。 ->名称无法开头   字符为'';

我确保request中没有任何不必要的空白,但这似乎并没有改变任何东西,任何想法我可能做错了什么?

1 个答案:

答案 0 :(得分:1)

我看不到您的XML格式的错误。 尝试按如下所述纠正它们。如果仍然出现错误,请在下面进行注释。

首先在<soap12:元素的名称空间声明中,xmlnsxsi之间不能有空格。

更正所有它们:xmlns:xsixmlns:xsdxmlns:soap12

<getLastLocation中,您只有xmlns,没有任何变量名。一些解析器可能不接受它。输入一些虚拟名称(例如xmlns:abc)。

在结束元素中,</和元素名称之间有空格。

更正以下所有内容:

</getLastLocation>

</soap12:Body>(还删除:Body之间的空格)

</soap12:Envelope>(还删除:Envelope之间的空格)