BitBucket'ten POST web karesi almak için şişeyi kullanıyorum. POST'un gövdesi, repoda ne değiştiğini, vb. Hakkında bilgi içerir. @post('/myroute')
ile bu kadar iyi bir şey yapabilirim, ancak gerçek POST gövdesi veri metnine ulaşmakta sorun yaşıyorum.Şişe kullanarak vücut metnini nasıl alabilirim?
StringIO.StringIO instance at 0x7fa13341c4d0
ve request.body.dir()
verim:
AttributeError: StringIO instance has no attribute 'dir'
Burada
request.body
verim konsola baskılı zaman
http://i.imgur.com/rWc7Hry.png
uçtan uca ne yapıyorum gösteren bir resimdir İstek gövdesinin asıl metnine nasıl ulaşacağımı merak ediyorum (ya da nesneyi bir şekilde aynı bulmak)? Ben de request.json
(hayır şans)
herhangi bir tavsiye denedim
:
POST isteği vücut bu gibi bir şey olacaktır? ,
{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<[email protected]>', 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}
ancak:
DÜZENLEME:
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
ilginç şimdi, parsedBody iyi görünüyor: ben bu kullanarak sona erdi
{"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<[email protected]>","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"}
ama jsonObj o kadar iyi değil
01 gibi bir şey yaptığımda beklendiği gibi çalıştığınıprint jsonObj['repository']['name']
istek verileri "nesne gibi bir dosya" dir, şişe dokümantasyon devletler olarak
ama kullanımı değildi bana açık ve o sayfada read() görmüyorum (işe yarayacak gibi görünüyor olsa da). Read() tarafından döndürülen dize, çok çirkin bir kodlama döndürür, tüm "ve {% 22% 2C +% 22 ile değiştirilir. Bunu json veya belki bir stringio> json yöntemi olarak almanın zarif bir yolu var mıyım? text manipulation ile ayrıştırmaktan kaçınmaya çalışmak .... – 3z33etm
@ 3z33etm StringIO belgeleri, dosya-nesne-belgelerini okumanızı önerir.Ama evet, okumak için bir örnek güzel olurdu. Bir sorunu dosyalayın;) Kodlama sorunları ile ilgili olarak: muhtemelen urllib veya cgi modülleri kullanılarak kodu çözülebilen bir çeşit kodlamadır. İsteğin başlıklarına bir göz atın. Request.json'un çalışmadığı neden bu olabilir. – deets
teşekkürler, iyi bilgi. – 3z33etm