2015-05-27 6 views
5

मैं बिटबकेट से पोस्ट वेबहुक प्राप्त करने के लिए बोतल का उपयोग कर रहा हूं। POST के बॉडी में रेपो, आदि में जो बदलाव आया है, उसके बारे में जानकारी है। मैं @post('/myroute') के साथ यह ठीक करने में सक्षम हूं, हालांकि मुझे वास्तविक पोस्ट बॉडी डेटा टेक्स्ट में समस्या हो रही है।बोतल का उपयोग करके शरीर के पाठ का अनुरोध कैसे प्राप्त करें?

StringIO.StringIO instance at 0x7fa13341c4d0

और request.body.dir() पैदावार:

AttributeError: StringIO instance has no attribute 'dir'

मैं

यहाँ से पता चलता है कि मैं अंत क्या कर रहा http://i.imgur.com/rWc7Hry.png

समाप्त करने के लिए जब request.body पैदावार सांत्वना देने मुद्रित एक छवि है मैं सोच रहा हूं कि मैं अनुरोध निकाय के वास्तविक पाठ को कैसे प्राप्त करूं (या वस्तु को किसी भी तरह से निरीक्षण करता हूं वही खोजें)?

http://pastebin.com/SWjLrHig

मैं भी 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 

दिलचस्प अब, 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<[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"} 

लेकिन 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<[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} 

हालांकि, जब मैं

01 जैसे कुछ करता हूं
print jsonObj['repository']['name'] 

यह काम करता है के रूप में उम्मीद

उत्तर

5

बोतल प्रलेखन राज्यों के रूप में (सिर्फ नाम 'परीक्षण' प्रिंट), अनुरोध डेटा "वस्तु की तरह एक फ़ाइल" है। http://bottlepy.org/docs/dev/tutorial.html#the-raw-request-body

तो आप read() का उपयोग करके कच्चे शरीर तक पहुंचते हैं।

इसके अलावा, dir वस्तुओं की एक विधि नहीं है, यह एक फ्रीस्टैंडिंग समारोह जो आप गुजर एक वस्तु फोन है।

dir(request.body) 

और StringIO लिए googling तुम यहाँ लाया जाना चाहिए था: https://docs.python.org/2/library/stringio.html

+0

मैं पोस्ट करने से पहले https://docs.python.org/2/library/stringio.html पर आए, लेकिन उपयोग नहीं था मेरे लिए स्पष्ट है, और मुझे उस पृष्ठ पर पढ़ने() दिखाई नहीं देता है (हालांकि यह काम करता प्रतीत होता है)। पढ़ने() द्वारा लौटाई गई स्ट्रिंग हालांकि बहुत बदसूरत एन्कोडिंग लौटाती है, सभी "और {% 22% 2C +% 22 के साथ प्रतिस्थापित की जाती हैं। क्या इसे जेसन, या शायद स्ट्रिंगियो> जेसन विधि के रूप में निगलना करने का एक शानदार तरीका है? मैं हूँ टेक्स्ट मैनिपुलेशन के साथ इसे पार्स करने से बचने की कोशिश कर रहा है .... – 3z33etm

+0

@ 3z33etm स्ट्रिंगियो दस्तावेज फ़ाइल-ऑब्जेक्ट-प्रलेखन पढ़ने का सुझाव देता है।लेकिन हाँ, पढ़ने के लिए एक उदाहरण अच्छा होगा। एक समस्या दर्ज करें;) एन्कोडिंग समस्याओं के बारे में: यह शायद urlencoding का कुछ रूप है, जिसे urllib या cgi मॉड्यूल का उपयोग करके डीकोड किया जा सकता है। अनुरोध के शीर्षकों पर एक नज़र डालें। यही कारण है कि 'request.json' काम नहीं करता है। – deets

+0

धन्यवाद, अच्छी जानकारी। – 3z33etm

संबंधित मुद्दे

 संबंधित मुद्दे