2015-05-09 3 views
0

У меня есть приложение, использующее Python с использованием Flask.Curl -d: Содержимое файла должно быть URL-кодировано

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

@app.route('/postIt', methods =['POST']) 
def postReview(): 
    #print flask.request 
    if flask.request.method == 'POST': 
     posts = flask.request.get_json() 
     print posts 
    return str(posts) 

Я пытаюсь отправить его запросить с помощью CURL:

curl http://127.0.0.1:5000/postIt -d @post.json -H "Content-Type: application/json" 

где post.json выглядит следующим образом:

{"post1":"3", "post2": "2", "post3":"3", "post4":"4" "post5": "5"} 

Это плохо работает. Результат на стороне сервера ничего не выводит, подразумевая, что он не может получить json-файл, который я отправляю.

Я посмотрел в -d flag of CURL и нашел эту вещь:

The contents of the file must already be URL-encoded. 

Таким образом, я предполагаю, что должно быть encoding issues with my post.json файл. Я точно не знаю, какая кодировка должна использоваться здесь. Пожалуйста помоги!!

ответ

1

Когда я попробовал ваш код, я получил 400 Bad Request:

!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<title>400 Bad Request</title> 
<h1>Bad Request</h1> 
<p>The browser (or proxy) sent a request that this server could not understand.</p> 

Тогда я обнаружил, что ваш файл JSON на самом деле не является действительным. Отсутствует , между post4 и post5. После его исправления я получил правильный ответ:

{u'post5': u'5', u'post4': u'4', u'post3': u'3', u'post2': u'2', u'post1': u'3'}% 
+0

Что такое% в конце вашего json? – mousecoder

+0

Это выход zsh для чего-то не заканчивается символом новой строки. – skyline75489