python - Python:SOAP API 不起作用,我做错了什么?
问题描述
我正在尝试使用 movildata.com 的 SOAP API 来获取车辆的最后位置,使用 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 procesar la solicitud。---> Un nombre no puede empezar con el car\xc3\xa1cter \' \',valor 十六进制 0x20。L\xc3\xadnea 2,正位\xc3\xb3n 9。
我从西班牙语翻译过来,上面写着类似于
服务器无法处理该请求。---> 名称不能以字符 ' ' 开头;
我确保没有任何不必要的空白空间,request
但这似乎并没有改变任何东西,任何想法我可能做错了什么?
解决方案
我已经看到你的 XML 格式的一些错误。尝试按如下所述更正它们。如果仍然收到错误,请在下方评论。
首先在元素的命名空间声明中,和<soap12:
之间不能有空格。xmlns
xsi
更正所有这些xmlns:xsi
:xmlns:xsd
和xmlns:soap12
在<getLastLocation
中,您只有xmlns
,没有任何变量名。一些解析器可能不接受它。给出一些假名(例如:)xmlns:abc
。
在结束元素中,</
元素名称之间有空格。
更正以下所有内容:
</getLastLocation>
</soap12:Body>
(同时删除 和 之间:
的空格Body
)
</soap12:Envelope>
(同时删除 和 之间:
的空格Envelope
)
推荐阅读
- javascript - 为什么 xaxis 和 yaxis 刻度不出现在 D3 的轴上?
- django - Get Data from Multiple ForeignKey Query Results
- python - 通用数学方程
- c++ - 使用文件中的数字作为输入来计算它们 c++
- python - python将列表与列表的比较列表
- javascript - ReferenceError:当我使用 vuejs 设置 PayPal Checkout 时,未定义 paypal
- java - java.lang.IllegalArgumentException:插件已经初始化
- terraform - Terraform:无法配置 aws ecs 自动缩放集群
- latex - 乳胶缺失 $ 插入
- nativescript - Nativescript update UI on ObservableArray push