【问题标题】:Flutter http.post sending empty bodyFlutter http.post 发送空正文
【发布时间】:2021-03-20 11:37:07
【问题描述】:

我尝试将数据发送到 Web 服务时遇到问题。貌似php文件中的$_POST[]变量没有收到Flutter中http.post请求的body内容。

在 Flutter 中,我使用以下代码:

var url = 'https://www.xxx';
var headers = {
  "Content-Type": "application/json",
};
var requestBody = json.encode(
    { 'pays': infoPays, 'societe': infoSociete, });

final http.Response response = await http.post(
    url,
    body: requestBody,
    headers: headers);
print(headers);
print(requestBody);
print(response.statusCode);

我的 php 文件(网络服务)如下:

<?php
//Header
header('Content-type: application/json');

//Connexion à la DB
try {
  $bdd = new PDO('xxx');

} catch (\Exception $e) {
  die('Erreur : '.$e->getMessage());
}
echo $_POST["pays"];

//Lecture du POST
$pays = isset($_POST["pays"])? htmlspecialchars($_POST["pays"]): "";
$societe = isset($_POST["societe"])? htmlspecialchars($_POST["societe"]): "";
$datetime = date ('Y-m-d H:i:s');

//Insertion des données
$req = $bdd->prepare("INSERT INTO Informations (pays, societe,  info_date) values (?,?,?)");
$execute = $req->execute(array($pays, $societe, $datetime));

if ($execute) {
    $responseArray = array(
        'status' => 'true',
        'message' => 'All data have been successfully stored.'
    );
} else {
    $responseArray = array(
        'status' => 'false',
        'message' => 'Error happened when storing data.'
    );
}
echo json_encode($responseArray);
 ?>

在我的数据库中,我看到有一条新记录(包括时间戳),我收到一个状态代码 200,证明它可以正常工作,但 php 文件应该从 Flutter http 请求中接收数据(我假设身体)是空的。 没有显示任何内容的 $_POST["pays"] 变量的回声证明了这一点。

因此,php 文件中的 $_POST[ ] 变量似乎没有收到 Flutter 中 http.post 请求正文的内容。

你能帮帮我吗? 我看不出代码有什么问题(我必须承认我不是专业的开发人员)。

非常感谢!

伯纳德

【问题讨论】:

    标签: php flutter post


    【解决方案1】:

    这与您的 php 代码有关,Dart 代码工作正常,因为发布请求成功,数据库中的新条目证明了这一点。

    但是由于该条目是空的并且只有一个时间戳,这意味着它没有填充您的数据库字段。

    因此,php 和 DB 之间存在缺陷,因为它没有解释或者您没有正确提取数据。不是php专家,所以不能准确指出问题出在哪里,但不是Flutter\Dart。

    我没有看到您在回显或存储之前对来自帖子正文的响应进行解码。解码身体应该会有所帮助。

    干杯

    【讨论】:

    • 感谢您的回答!我认为问题在于 http.post 请求和 php 中的 $_POST[ ] 变量之间的交互,http.post 没有填充 $_POST[ ] 变量。我只是不明白为什么。
    • 嘿伯纳德,我没有看到您在回显或存储之前对来自帖子正文的响应进行解码。希望有 php 开发者过来指出问题。
    • 太好了,必须解码!我添加了这一行: $_POST = json_decode(file_get_contents('php://input'), true);它有效!非常感谢胡泰法!
    • 很高兴听到这个消息!请将此标记为“答案”,因为它解决了问题。不客气,伯纳德!
    猜你喜欢
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 2019-05-16
    相关资源
    最近更新 更多