使用flatter向PHP REST API发送HTTP POST请求

使用flatter向PHP REST API发送HTTP POST请求,php,flutter,Php,Flutter,所以我在这方面已经做了很长时间了,但我不明白为什么这不起作用。我正在尝试将一些JSON post数据发送到我创建的现有PHP REST API,然后读取JSON数据,如$\u post[“username”]而且我无法真正改变API的工作方式,因为它被另一个应用程序使用,而另一个应用程序与之完美配合,因此这与我的颤振代码有关,但我不确定我今天开始学习它时是怎么回事 我的颤振代码: import 'package:http/http.dart' as http; http.Response re

所以我在这方面已经做了很长时间了,但我不明白为什么这不起作用。我正在尝试将一些JSON post数据发送到我创建的现有PHP REST API,然后读取JSON数据,如
$\u post[“username”]
而且我无法真正改变API的工作方式,因为它被另一个应用程序使用,而另一个应用程序与之完美配合,因此这与我的颤振代码有关,但我不确定我今天开始学习它时是怎么回事

我的颤振代码:

import 'package:http/http.dart' as http;

http.Response response = await http.post(
    'https://path.to.php.file',
    headers: <String, String>{
      'Content-Type': 'application/json',
    },
    body: jsonEncode(<String, String>{
      "formname": "login",
      "username": globals.currentUsername, // value = futurelucas4502
      "password": globals.currentPassword, // value = password
      "datetime": DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now()) // MySql Datetime format
    }),
  );

  debugPrint("Response: " + response.body);
  debugPrint("Status: " + (response.statusCode).toString());
import'package:http/http.dart'作为http;
http.Response-Response=等待http.post(
'https://path.to.php.file',
标题:{
“内容类型”:“应用程序/json”,
},
正文:JSONECODE({
“formname”:“登录”,
“用户名”:globals.currentUsername,//value=futurelucas4502
“密码”:globals.currentPassword,//值=密码
“datetime”:DateFormat(“yyyy-MM-dd HH:MM:ss”).format(datetime.now())//MySql-datetime格式
}),
);
debugPrint(“响应:+Response.body”);
debugPrint(“状态:”+(response.statusCode.toString());
减少PHP代码:

<?php
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    echo file_get_contents('php://input');
    echo '<br>';
    echo $_POST["username"];
?>

输出:

Response: {"formname":"login","username":"futurelucas4502","password":"password","datetime":"2020-05-12 00:01:33"}<br><br />

<b>Notice</b>:  Undefined index: username in <b>/storage/ssd2/545/12156545/public_html/temp/index.php</b> on line <b>7</b><br />

Status: 200
响应:{“formname”:“login”,“username”:“futurelucas4502”,“password”:“password”,“datetime”:“2020-05-12 00:01:33”}

注意:未定义索引:第7行/storage/ssd2/545/12156545/public_html/temp/index.php中的用户名
现状:200
我可以在我的颤振代码中更改什么以使其工作?

编辑:为了清楚起见,我确实想处理一个应用程序/json请求
文件\u get\u contents
的唯一原因是要测试PHP API是否真的接收到了数据。

看起来你应该发送一个URL编码的表单,而不是json编码post数据

尝试:

正文:{
“formname”:“登录”,
“用户名”:globals.currentUsername,//value=futurelucas4502
“密码”:globals.currentPassword,//值=密码
“datetime”:DateFormat(“yyyy-MM-dd HH:MM:ss”).format(datetime.now())//MySql-datetime格式
},

看起来您应该只发送一个URL编码的表单,而不是对post数据进行JSON编码

尝试:

正文:{
“formname”:“登录”,
“用户名”:globals.currentUsername,//value=futurelucas4502
“密码”:globals.currentPassword,//值=密码
“datetime”:DateFormat(“yyyy-MM-dd HH:MM:ss”).format(datetime.now())//MySql-datetime格式
},

在php脚本中不能只获取用户名值,对吗?php代码非常混乱。您想处理
应用程序/json
请求还是
应用程序/x-www-form-urlencoded
文件获取内容('php://input“)
建议使用前者,但
$\u POST[“username”]
建议使用后者。你不能两者兼得。这另一个应用程序使用什么?我想使用application/json和$\u POST[“username”],但谢谢你,我现在有了一个解决方案,你不能在php脚本中只获取用户名值,是吗?php代码非常混乱。您想处理
应用程序/json
请求还是
应用程序/x-www-form-urlencoded
文件获取内容('php://input“)
建议使用前者,但
$\u POST[“username”]
建议使用后者。你不能两者兼得。这另一个应用程序使用什么?我想使用application/json和$\u POST[“username”],但谢谢你,我现在有了一个解决方案,导致出现了
异常。StateError(错误状态:无法设置内容类型为“application/json”的请求的正文字段)
因此,请删除该标题,这很有意义,因为您没有发送json,所以不应设置内容类型。这会导致出现
异常。StateError(错误状态:无法设置内容类型为“application/json”的请求的正文字段)
因此,请删除该标题,这很有意义,因为您没有发送json,因此不应设置内容类型。
body: <String, String>{
  "formname": "login",
  "username": globals.currentUsername, // value = futurelucas4502
  "password": globals.currentPassword, // value = password
  "datetime": DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now()) // MySql Datetime format
},