使用flatter向PHP REST API发送HTTP POST请求
所以我在这方面已经做了很长时间了,但我不明白为什么这不起作用。我正在尝试将一些JSON post数据发送到我创建的现有PHP REST API,然后读取JSON数据,如使用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
$\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
},