मैं बिटबकेट से पोस्ट वेबहुक प्राप्त करने के लिए बोतल का उपयोग कर रहा हूं। 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
पैदावार सांत्वना देने मुद्रित एक छवि है मैं सोच रहा हूं कि मैं अनुरोध निकाय के वास्तविक पाठ को कैसे प्राप्त करूं (या वस्तु को किसी भी तरह से निरीक्षण करता हूं वही खोजें)?
मैं भी 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']
यह काम करता है के रूप में उम्मीद
मैं पोस्ट करने से पहले https://docs.python.org/2/library/stringio.html पर आए, लेकिन उपयोग नहीं था मेरे लिए स्पष्ट है, और मुझे उस पृष्ठ पर पढ़ने() दिखाई नहीं देता है (हालांकि यह काम करता प्रतीत होता है)। पढ़ने() द्वारा लौटाई गई स्ट्रिंग हालांकि बहुत बदसूरत एन्कोडिंग लौटाती है, सभी "और {% 22% 2C +% 22 के साथ प्रतिस्थापित की जाती हैं। क्या इसे जेसन, या शायद स्ट्रिंगियो> जेसन विधि के रूप में निगलना करने का एक शानदार तरीका है? मैं हूँ टेक्स्ट मैनिपुलेशन के साथ इसे पार्स करने से बचने की कोशिश कर रहा है .... – 3z33etm
@ 3z33etm स्ट्रिंगियो दस्तावेज फ़ाइल-ऑब्जेक्ट-प्रलेखन पढ़ने का सुझाव देता है।लेकिन हाँ, पढ़ने के लिए एक उदाहरण अच्छा होगा। एक समस्या दर्ज करें;) एन्कोडिंग समस्याओं के बारे में: यह शायद urlencoding का कुछ रूप है, जिसे urllib या cgi मॉड्यूल का उपयोग करके डीकोड किया जा सकता है। अनुरोध के शीर्षकों पर एक नज़र डालें। यही कारण है कि 'request.json' काम नहीं करता है। – deets
धन्यवाद, अच्छी जानकारी। – 3z33etm