Skip to content
Advertisement

Flask API is unable to receive data from PHP

I’m trying to run a flask API in a specific port number as below,

from flask import Flask, request
from pymongo import MongoClient
import json


app = Flask(__name__)

@app.route("/")
def hello():
    return "Befriend Registration"
@app.route("/reg", methods=["POST"])
def pushDB():
    somedata= request.get_json()
    return json.dumps({"status":"OK", "Data": somedata})

if __name__ == '__main__':
    app.run(port= 34000, debug=True)

And trying to send data using PHP

<?php
    $url = 'http://127.0.0.1:34000/reg';
    $data = array("collection" => "RapidAPI");
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS,  json_encode($data));
    $response = curl_exec($curl);
    echo $response;
    curl_close($curl);
?>

But every time API is receiving null The response body is something like

{
status: "OK",
Data: null
}

Advertisement

Answer

Flask needs to know that it is receiving “json”. In your PHP script you need to add additional “Content-Type” header.

<?php
$url = 'http://127.0.0.1:34000/reg';
$data = array("collection" => "RapidAPI");
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS,  json_encode($data));
curl_setopt($curl, CURLOPT_HTTPHEADER, [
   'Content-Type: application/json'
]);
$response = curl_exec($curl);
echo $response;
curl_close($curl);
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement