2013-02-15 1 views
1

У меня есть сервер, который должен иметь возможность принимать JSON, а затем обрабатывать его, а затем отправлять JSON обратно. Код на моей стороне сервера использует bottle.py with cherrypy. Маршрут в концерне является следующее:Отправка JSON через модуль запросов и его использование с использованием bott.py и cherrypy

@route ('/tagTweets', method='POST') 
def tagTweets(): 

    response.content_type = 'application/json' 

    # here I need to be able to parse JSON send along in this request. 

Для запроса на эту страницу и тестирование функциональности, я использую Спросы код модуля:

данные, которые я должен послать это список твитов. Данные сами извлекаются с некоторого сервера, который возвращает список твитов. Для получения твитов я использую requests.get, а затем используя json-метод объекта ответа. Это работает нормально. Теперь я после некоторой обработки на этом, я должен послать этот json, точно так же как я приносил к другому серверу.

url  = "http://localhost:8080/tagTweets" 
data = {'sender': 'Alice', 'receiver': 'Bob', 'message': 'We did it!'} 
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} 
r  = requests.post(url, data=json.dumps(data), headers=headers) 

Я не могу понять, как получить доступ к json send по запросу.

ответ

5

Для application/json POST, просто получить доступ request.json:

@route ('/tagTweets', method='POST') 
def tagTweets(): 
    response.content_type = 'application/json' 
    sender = request.json['sender'] 
    receiver = request.json['receiver'] 
    message = request.json['message'] 
+0

Уважаемый Martijn, я использую cherrypy with bottle.py. Работает команда сервера, как это: пробег (хост = '0.0.0.0', порт = 8082, сервер = 'CherryPy') request.json выходит в NONE по какой-то причине – VaidAbhishek

+1

@VaidAbhishek: CherryPy просто другой сервер WSGI в этом случае; какую версию бутылки вы используете? Что 'request.body.read()' дает вам? –

0

Дайте это попробовать ...

// CherryPy

import json 

@route ('/tagTweets', method='POST') 
def tagTweets(UpdatedData=None): 
    Data = json.loads(UpdatedData) 

// Javascript

function SendJson() 
{ 
    var JSONObject = { changes: [] }; 
    JSONObject.changes.push({"sender": "Alice", "receiver": "Bob" } 
      ); 

    // code for IE7+, Firefox, Chrome, Opera, Safari 
    if(window.XMLHttpRequest) 
     xmlhttp=new XMLHttpRequest(); 
    else// code for IE6, IE5 
     xmlhttp=new ActiveXObject('Microsoft.XMLHTTP'); 

    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      alert(xmlhttp.responseText); 
     } 
    } 

    xmlhttp.open("POST","/tagTweets", true); 
    xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    xmlhttp.send(JSON.stringify(JSONObject)); 
} 

Надеюсь, это поможет.

Andrew

+0

Что такое UpdateData – VaidAbhishek

+1

Просто имя переменной. Может быть что угодно. Ох - не добавил его к вишневому обработчику ... Сейчас я отредактирую свой ответ. –

+0

Если вы используете POST, то почему вы отправляете данные в строку запроса! – VaidAbhishek

 Смежные вопросы

  • Нет связанных вопросов^_^