postman 我不明白为什么我的后请求使用 Postman 收到参数只有当我使用x-www-form-urlencoded

cu6pst1q  于 2022-11-07  发布在  Postman
关注(0)|答案(1)|浏览(194)

我尝试使用postman发送一些post值到我的脚本php...但是我只能打印出post值,如果我使用x-www-form-urlencoded,而不是如果我通过form-data发送数据?
这是为什么?无法理解x-www-form-urlencoded和form-data之间的差异。

php代码测试:

  1. <?php
  2. // this script call to register new user into db
  3. require ("../private/index.php");
  4. if ($_SERVER['REQUEST_METHOD'] == "POST") {
  5. $staff = $_POST['staff_ID'];
  6. $email = $_POST['email'];
  7. $pass = $_POST['password'];
  8. $name = $_POST['Name'];
  9. $surname = $_POST['Surname'];
  10. $role = $_POST['Role'];
  11. $instructor = $_POST['Instructor'];
  12. $date = $date = date("Y-m-d H:i:s",time());
  13. $dataReceived = array('staff_ID'=>$staff,
  14. 'email'=>$email,
  15. 'password'=>$pass,
  16. 'Name'=>$name,
  17. 'Surname'=>$surname,
  18. 'Role'=>$role);
  19. echo json_encode($dataReceived);
  20. $sql = "INSERT INTO `users_nx`(`staff_ID`,`password`,`email`,`Name`,`Surname`,`Role`) VALUES ($staff,$pass,$email,$name,$surname,$role)";
  21. if ($mysqli->query($sql) === TRUE) {
  22. echo resultOperations(true, $mysqli);
  23. } else {
  24. echo resultOperations(false,$mysqli);
  25. }
  26. }
wljmcqd8

wljmcqd81#

在传输过程中,x-www-form-urlencoded和form-data都被携带在请求体中。
首先,x-www-form-urlencoded一般用于表单的提交,如多个输入字段,form-data用于文件的提交,如file文件、图片图像等,前者是json key-value格式的字符串,后者是二进制流。
为什么我不能在php服务器上得到数据呢?我不知道php,我以前在nodejs上测试过,nodejs需要一个名为bodyparser的npm来将字符串key格式化为json key-value. php应该有这个解析过程.所以你可以直接得到json数据.但是,如果你使用的是form-data,无法根据解析规则解析此二进制文件。2需要通过流解析获取它。
这可能有点麻烦,但是您可以打印http请求主体的数据来查看差异。

相关问题