2016-06-06 7 views
4

У меня есть простой клиент HTTP в питоне, отправляющий запрос HTTP POST, как это:доступа содержания JSON запроса HTTP POST с Кляйном в питоне

import json 
import urllib2 
from collections import defaultdict as dd 
data = dd(str) 
req = urllib2.Request('http://myendpoint/test') 
data["Input"] = "Hello World!" 
response = urllib2.urlopen(req, json.dumps(data)) 

На моей стороне сервера с Настоем, я могу определить простой функция

from flask import request 
@app.route('/test', methods = ['POST']) 
def test(): 
    output = dd() 
    data = request.json 

И data на сервере будет тот же словарь, как data на стороне клиента.

Однако, теперь я двигаюсь Клейн, так что код сервера выглядит следующим образом:

@app.route('/test', methods = ['POST']) 
@inlineCallbacks 
def test(request): 
    output = dd() 
    data = request.json <=== This doesn't work 

и запрос, который был использован в Klein не поддерживает ту же функцию. Интересно, есть ли способ получить json в Klein так же, как я получил его в Flask? Спасибо, что прочитали этот вопрос.

ответ

7

Asaik Klein не дает прямой доступ к данным JSON, однако вы можете использовать этот код для доступа к нему:

import json 

@app.route('/test', methods = ['POST']) 
@inlineCallbacks 
def test(request): 
    output = dd() 
    data = json.loads(request.content.read()) # <=== This will work 
+0

Это сработало! Спасибо вам. Я просто не знаю, как получить доступ к контенту (request.content.read()) – JLTChiu

+0

Я трачу часы, пытаясь «request.args.get», который по какой-то причине не работает должным образом. Затем я нахожу этот пост случайно, и теперь моя проблема решена. Спасибо !!!!!! – chanp

+0

@chanp, рад я мог бы помочь :) – Dekel