python - 使用 urllib2 进行 SOAP POST,但我不断收到错误

标签 python api soap post typeerror

我正在尝试通过 SOAP POST 进行 API 调用,但我不断收到 “类型错误:不是有效的非字符串序列或映射对象。” @data = urllib.urlencode(值)

SM_TEMPLATE = """<?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">
  <soap:Header>
    <AutotaskIntegrations xmlns="http://Autotask.net/ATWS/v1_5/">
      <PartnerID>partner id</PartnerID>
    </AutotaskIntegrations>
  </soap:Header>
  <soap:Body>
    <getThresholdAndUsageInfo xmlns="http://Autotask.net/ATWS/v1_5/">
    </getThresholdAndUsageInfo>
  </soap:Body>
</soap:Envelope>"""

values = SM_TEMPLATE%()
data = urllib.urlencode(values)
req = urllib2.Request(site, data)
response = urllib2.urlopen(req)
the_page = response.read()

如有任何帮助,我们将不胜感激。

最佳答案

urllib.urlencode 函数需要一个键值对序列或像 dict 这样的映射类型:

>>> urllib.urlencode([('a','1'), ('b','2'), ('b', '3')])
'a=1&b=2&b=3'

要执行 SOAP HTTP POST,您应该保持 SM_TEMPLATE blob 不变并将其设置为 POST 正文,然后为 POST 正文的编码和字符集添加 Content-Type header 。例如:

data = SM_TEMPLATE
headers = {
    'Content-Type': 'application/soap+xml; charset=utf-8'
    }
req = urllib2.Request(site, data, headers)

关于python - 使用 urllib2 进行 SOAP POST,但我不断收到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5207208/

相关文章:

python - Matplotlib boxplot + imageshow(子图)

python - 检查 Column 是否超过特定值并替换

java - 如何在 Android Retrofit api 中为每个 api 使用 OkHttp 拦截器获取 api 请求和 api 响应时间?

api - 有什么方法可以使用 yelp 的 URL 获取业务数据?

java - 解码非强制 ENUM @XmlElement

WCF: (MTOM) 有什么办法可以改变 WCF 生成的 xop:Content 引用 uri 中使用的方案?

python - 尝试每小时向 channel 发送消息

逐 block 读取文件时Python不返回所有数据

ios - Swift 3 - 使用 API 调用的最新方法

java - XML 解析错误