Post传参中Content-Type

文章摘要

Bpple-GPT

Content-Type

起因最近做题的时候post传参数的时候,需要传一个json数据,但是无论如何都不对,最后检查发现是这个POST的 enctype不对

  • application/x-www-form-urlencoded
  • multipart/form-data
  • text/plain
  • application/json

就是我们利用bp,hackbar也好,传post参数的时候都需要在HTTP头设置一个 Content-Type


就借助 deepseek总结一下

application/x-www-form-urlencoded

这个是我们最常见的

**这是默认的编码类型。在这种编码方式下,表单数据会被编码为键值对,键和值之间用 **= 连接,不同的键值对之间用 & 连接。编码后的数据会被 URL 编码(即特殊字符会被转换为 %HH 格式,空格会被转换为 +)。

平时传参数基本全用的它,看介绍就是键值对的形式,被url编码,传递

 a=hello&b=world

一个例子

前端html:

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Login Form</title>
 </head>
 <body>
     <form method="post" action="submit.php" enctype="application/x-www-form-urlencoded">
         <label for="username">Username:</label>
         <input type="text" id="username" name="username" required>
         <br>
         <label for="password">Password:</label>
         <input type="password" id="password" name="password" required>
         <br>
         <input type="submit" value="Submit">
     </form>
 </body>
 </html>
 ​

后端php:

 <?php
 // 检查是否有 POST 请求
 if ($_SERVER['REQUEST_METHOD'] === 'POST') {
     // 获取表单数据
     $username = $_POST['username'];
     $password = $_POST['password'];
 ​
     // 输出接收到的数据
     echo "Username: " . htmlspecialchars($username) . "<br>";
     echo "Password: " . htmlspecialchars($password) . "<br>";
 ​
     // 在这里可以添加更多的逻辑,例如验证用户名和密码、将数据存储到数据库等
 } else {
     // 如果不是 POST 请求,显示错误信息
     echo "Invalid request method.";
 }
 ?>

multipart/form-data

这种编码类型用于上传文件。在这种编码方式下,表单数据会被分割成多个部分,每个部分对应一个表单字段。每个部分都有自己的头信息,包括字段名、文件名(如果是文件)、内容类型等。

在做文件上传类型题的时候,我们抓包会发现这种形式的数据

前端html代码:

 <form method="post" action="upload.php" enctype="multipart/form-data">
         <label for="username">Username:</label>
         <input type="text" id="username" name="username" required>
         <br>
         <label for="profile_picture">Profile Picture:</label>
         <input type="file" id="profile_picture" name="profile_picture" required>
         <br>
         <input type="submit" value="Submit">
     </form>

后端php:

 <?php
 // 检查是否有 POST 请求
 if ($_SERVER['REQUEST_METHOD'] === 'POST') {
     // 获取表单数据
     $username = $_POST['username'];
 ​
     // 检查文件上传是否成功
     if (isset($_FILES['profile_picture']) && $_FILES['profile_picture']['error'] === UPLOAD_ERR_OK) {
         $fileTmpPath = $_FILES['profile_picture']['tmp_name'];
         $fileName = $_FILES['profile_picture']['name'];
         $fileSize = $_FILES['profile_picture']['size'];
         $fileType = $_FILES['profile_picture']['type'];
 ​
         // 设置上传目录
         $uploadDir = './uploads/';
         if (!is_dir($uploadDir)) {
             mkdir($uploadDir, 0777, true);
         }
 ​
         // 生成唯一的文件名
         $fileNameCmps = explode(".", $fileName);
         $fileExtension = strtolower(end($fileNameCmps));
         $newFileName = md5(time() . $fileName) . '.' . $fileExtension;
 ​
         // 移动文件到上传目录
         $destFilePath = $uploadDir . $newFileName;
         if (move_uploaded_file($fileTmpPath, $destFilePath)) {
             echo "Username: " . htmlspecialchars($username) . "<br>";
             echo "File uploaded successfully: " . htmlspecialchars($newFileName) . "<br>";
         } else {
             echo "File upload failed.";
         }
     } else {
         echo "File upload error.";
     }
 } else {
     // 如果不是 POST 请求,显示错误信息
     echo "Invalid request method.";
 }
 ?>

提交之后数据格式如下:

 ------WebKitFormBoundary7MA4YWxkTrZu0gW
 Content-Disposition: form-data; name="username"
 ​
 John Doe
 ------WebKitFormBoundary7MA4YWxkTrZu0gW
 Content-Disposition: form-data; name="profile_picture"; filename="profile.jpg"
 Content-Type: image/jpeg
 ​
 [binary data]
 ------WebKitFormBoundary7MA4YWxkTrZu0gW--

application/json

application/json 是一种用于表示 JSON 格式数据的 MIME 类型。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

在原链题里面遇到过一次

  • application/json:用于表示 JSON 格式的数据,适用于复杂的结构化数据传输。
  • 使用场景:API 请求、配置文件、日志记录等。
  • 客户端处理:使用 fetchXMLHttpRequest 发送 JSON 数据,设置 Content-Typeapplication/json
  • 服务器端处理:使用相应的中间件(如 Express 的 express.json())解析 JSON 请求体。

就说传json格式的数据的时候使用这个


text/plain

**这种编码类型会将表单数据以纯文本的形式发送,键和值之间用 **= 连接,但不会对特殊字符进行 URL 编码。

就是第一个类型,不进行url编码,服务端不给你处理了


用键盘敲击出的不只是字符,更是一段段生活的剪影、一个个心底的梦想。希望我的文字能像一束光,在您阅读的瞬间,照亮某个角落,带来一丝温暖与共鸣。

BX33661

isfp 探险家

站长

不具版权性
不具时效性

文章内容不具时效性。若文章内容有错误之处,请您批评指正。


目录

欢迎来到Bpple的站点,为您导航全站动态

65 文章数
20 分类数
44 评论数
15标签数
最近评论
bpple

bpple


一切顺利

fetain

fetain


good luck

bx

bx


good luck

热门文章

Emoji收集

2024-11-01

551
Hello Halo

2024-10-30

532
本地部署LLM

2024-08-22

511
Uptime Kuma

2024-11-29

507
241

访问统计