Saya telah belajar sendiri API akhir-akhir ini, dan tepat ketika saya pikir saya sudah mulai memahaminya, saya mengalami masalah ini:

Saya telah membangun api saya sendiri, menggunakan flast_restful:

from flask import Flask, request
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)


class HelloWorld(Resource):
    def get(self):
        return {"hello": "world"}

    def post(self):
        json_str = request.get_json()
        return {"you sent": json_str}


api.add_resource(HelloWorld, "/")

if __name__ == "__main__":
    app.run(debug=True)

Saya menjalankannya di konsol, lalu berencana mengaksesnya dalam kode, menggunakan modul permintaan python:

import requests

data = {"hello:": "world"}

r = requests.post("http://127.0.0.1:5000", data=data)

print(r.text)

Mengapa ini mengembalikan {"you sent": null}, alih-alih data yang ditentukan dalam permintaan posting? Dapatkan permintaan berfungsi, dan kode respons dari permintaan pos adalah 200.

Saya berasumsi ada beberapa perbaikan mudah untuk ini yang tidak dapat saya temukan. Bantuan apa pun sangat dihargai!

0
Leo_44583 30 Juni 2020, 18:53

1 menjawab

Jawaban Terbaik
r = requests.post("http://127.0.0.1:5000", data=data)

Masalahnya di sini adalah data tidak dikirim sebagai json; itu dikodekan bentuk secara default. Untuk mengirimnya dengan benar, Anda harus menyetel tipe konten sebagai application/json di header. Anda dapat melakukannya seperti ini:

import json
headers = {'Content-type': 'application/json'}
r = requests.post("http://127.0.0.1:5000", data=json.dumps(data), headers=headers)

Atau lebih sederhana seperti ini dengan Permintaan versi 2.4.2 dan seterusnya:

r = requests.post("http://127.0.0.1:5000", json=data)
1
jignatius 30 Juni 2020, 17:39