Python 3 urlopen用法

时间:2017-03-29 12:27:07

标签: python api urlopen

我正在处理一个python脚本,该脚本将与我正在部署的CRM系统的API进行通信。我可以从CRM服务器获取数据,但我似乎无法添加(写入)新条目。我怀疑我做的事情很愚蠢,因为我对Python和编程都很陌生,有人能指出我正确的方向吗?服务器不拒绝数据,但它就像我从/api/v1.0/payments请求数据而不是发布新数据。

from urllib.request import Request, urlopen

headers = {
  'Content-Type': 'application/json',
  'X-Auth-App-Key': '[API key]'
}

values = b"""
  {
"clientId": 104,
"method": 3,
"checkNumber": "",
"createdDate": "2016-09-12T00:00:00+0000",
"amount": 40,
"note": "",
  }
"""

request = Request('http://[SERVER_URL]/api/v1.0/payments', data=values, headers=headers)

response_body = urlopen(request).read()
print(response_body)

我的工作基于API文档中的示例代码: http://docs.ucrm.apiary.io/#reference/payments/payments/post

我是否在底部正确使用了urlopen?

1 个答案:

答案 0 :(得分:0)

This question/answer可能是你的问题。基本上你的POST请求被重定向到/api/v1.0/payments/(注意斜杠),当发生这种情况时你的POST被重定向到GET请求,这就是服务器响应的原因,就像你试图检索一样所有付款信息。

需要注意的其他事项是你的json数据实际上是无效的,因为它在'note'值之后包含一个尾随function seconds_with_leading_zeros(dt) { return /\((.*)\)/.exec(new Date().toString())[1]; } dt = new Date(); console.log(seconds_with_leading_zeros(dt)); dt = new Date(1989, 10, 1); console.log(seconds_with_leading_zeros(dt)); ,所以这也可能是一个问题。我想您可能也错过了标题中的,标题。我建议使用Content-Length模块来创建json数据:

json