Разница в данных POST-запросов, полученных сервером Flask при вызове от urllib и Postman - PullRequest
0 голосов
/ 30 ноября 2018

Флэш-сервер просто печатает данные, которые он получает от клиента, выполняющего запрос POST.Он также проверяет наличие присутствия из Авторизация заголовка.

from flask import Flask, request

app = Flask(__name__)

@app.route('/random', methods=['POST'])
def random():
    if request.method == 'POST':
        if request.headers.get('Authorization') and request.headers.get('Content-Type') == 'application/json':
            print(request.get_json())
            print(request.data)
            return "Success"
        else:
            print(request.get_json())
            print(request.data)
            return "Bad request"

app.run(host='0.0.0.0', port=5000, debug=True)

Теперь, когда я тестирую API из Почтальон , он работает отлично.Однако мы собираемся проверить это немного по-другому.В ваших заголовках снимите флажок и заголовок Authorization и Content-Type , а затем в теле отправьте этот json-

{"spam": 1, "eggs": 2, "bacon": 0}

Вывод на терминал -

None
b'{"spam": 1, "eggs": 2, "bacon": 0}'
127.0.0.1 - - [30/Nov/2018 12:25:33] "?[37mPOST /random HTTP/1.1?[0m" 200 -

Теперь мы будем делать то же самое с помощью urllib.Ниже приведен код для этого -

import json
import urllib.request
import urllib.parse
d = {"spam": 1, "eggs": 2, "bacon": 0}
data = json.dumps(d)
data = data.encode()
req = urllib.request.Request("http://localhost:5000/random", data)
req.add_header('Content-Type', 'application/json')
req.add_header('Authorization', 12345)

with urllib.request.urlopen(req) as f:
    print(f.read().decode('utf-8'))

, который отлично работает.Однако, чтобы воссоздать то, что мы сделали с Почтальоном, мы закомментируем строки req.add_header следующим образом -

#req.add_header('Content-Type', 'application/json')
#req.add_header('Authorization', 12345)

И затем, когда мы выполним скрипт, мы получим из него этот вывод -

None
b''
127.0.0.1 - - [30/Nov/2018 12:27:18] "?[37mPOST /random HTTP/1.1?[0m" 200 -

Мне нужно знать, какое из этих двух значений является правильным ожидаемым поведением и почему они отличаются?

...