我正在使用瓶子从bitbucket接收POST webhook.POST的主体包含有关回购中更改内容的信息,等等.我能够做到这一点@post('/myroute'),但是我无法获得实际的POST正文数据文本.
这是一张图片,展示了我正在做什么的结束 http://i.imgur.com/rWc7Hry.png
打印到控制台时request.body产量:
StringIO.StringIO实例位于0x7fa13341c4d0
和request.body.dir()产量:
AttributeError:StringIO实例没有属性'dir'
我想知道如何获取请求体的实际文本(或以某种方式检查对象以找到相同的)?
POST请求正文看起来像这样:
我也试过了request.json(没运气)
任何建议?
编辑:我最终使用这个:
from bottle import get, post, request, run
import urllib
import json
@post('/bitbucket')
def postToJSON():
body = request.body.read()
body = body.replace("+","").replace("payload=","")
parsedBody = urllib.unquote(body).decode('utf8')
print parsedBody
jsonObj = json.loads(parsedBody)
print jsonObj
Run Code Online (Sandbox Code Playgroud)
有趣的是,parsedBody看起来不错:
{"repository":{"website":null,"fork":false,"name":"test","scm":"git","owner":"
testName","absolute_url":"/testNameTest/test/","slug":"test","is_private":true},"trunc
ated":false,"commits":[{"node":"04554d6980dd","files":[{"type":"modified","file"
:"stacker.py"}],"raw_author":"TestName<testName@testName.info>","utctimestamp":"
2015-05-2815:30:03+00:00","author":"testName","timestamp":"2015-05-2817:30:03","
raw_node":"04554d6980dd3c5fe4c3712d95b49fcf9b8da4f4","parents":["7f98b4e7532e"],
"branch":"master","message":"foo\n","revision":null,"size":-1}],"canon_url":"htt
ps://bitbucket.org","user":"testName"}
Run Code Online (Sandbox Code Playgroud)
但是jsonObj并不是那么好:
{u'commits': [{u'node': u'7f98b4e7532e', u'files': [{u'type': u'modified', u'fil
e': u'stacker.py'}], u'branch': u'master', u'utctimestamp': u'2015-05-2815:24:50
+00:00', u'author': u'TestName', u'timestamp': u'2015-05-2817:24:50', u'raw_node
': u'7f98b4e7532e02d53d83a29ec2073c5a5eac58c8', u'parents': [u'019e77d2e0d3'], u
'raw_author': u'TestNamer<TestName@TestName.info>', u'message': u'foo\n', u'size'
: -1, u'revision': None}], u'user': u'TestName', u'canon_url': u'https://bitbuck
et.org', u'repository': {u'website': None, u'fork': False, u'name': u'test', u's
cm': u'git', u'absolute_url': u'/ericTest/test/', u'owner': u'TestName', u'slug'
: u'test', u'is_private': True}, u'truncated': False}
Run Code Online (Sandbox Code Playgroud)
但是,当我做类似的事情
print jsonObj['repository']['name']
Run Code Online (Sandbox Code Playgroud)
它按预期工作(只打印名称'test')
正如瓶子文档所述,请求数据是"像对象一样的文件".http://bottlepy.org/docs/dev/tutorial.html#the-raw-request-body
所以你使用了访问原始的身体read().
此外,dir它不是一个对象的方法,它是一个独立的函数,你称之为传递一个对象.
dir(request.body)
Run Code Online (Sandbox Code Playgroud)
谷歌搜索StringIO应该带你到这里:https://docs.python.org/2/library/stringio.html
| 归档时间: |
|
| 查看次数: |
6075 次 |
| 最近记录: |