json格式的请求体和url编码格式(Query String 格式)的请求体

1,在浏览器开发者工具看到的载荷长什么样子?

(1)json格式的请求体(载荷):{"title":"aaaa","type":1,"account":300,"remarks":"ccccc"}
(2)url编码格式的请求体(载荷):name=Alice&age=30&email=alice%40example.com
(3)还有form-data格式的请求体,它的请求体和请求头如下图所示。知道长什么样就行了,本篇文章不再讨论form-data格式的请求体了

 

另外,还有一个Query String 格式,它和url编码格式非常相似,区别就是URL 编码格式对特殊字符和非 ASCII 字符进行了编码,确保它们在 URL 中的正确传输和解析。

以下是五个示例,分别给出了 Query String 格式和 URL 编码格式:

示例一:
Query String 格式:param1=value1&param2=value2
URL 编码格式:param1=value1&param2=value2

示例二:
Query String 格式:name=John Doe&age=30
URL 编码格式:name=John%20Doe&age=30

2,请求头是什么样子?

json格式的请求头:Content-Type: application/json

url编码格式的请求头:Content-Type:application/x-www-form-urlencoded

3,在html代码中怎样发出这两种格式的请求体?

(3.1)json格式的请求,不能通过html的form表单标签发出,一般是通过Ajax通信(包括XMLHttpRequest 和 Fetch API )

<!--基于XMLHttpRequest发送json请求体 -->

<!DOCTYPE html>
<html>
<head>
  <title>Submit JSON Request</title>
</head>
<body>
  
  <script>
    // 创建一个 JSON 对象
    var data = {
      title: 'aaaa',
      time: '2023-07-09',
      type: 1,
      account: 300,
      remarks: 'ccccc'
    };

    // 将 JSON 对象转换为字符串
    var jsonData = JSON.stringify(data);

    // 创建一个 XMLHttpRequest 对象
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'http://127.0.0.1:3000/account', true);
    xhr.setRequestHeader('Content-Type', 'application/json');

    // 发送请求
    xhr.send(jsonData);
  </script>

</body>
</html>

<!--基于Fetch API发送json请求体 -->


<!DOCTYPE html>
<html>
<head>
  <title>Ajax JSON 请求示例</title>
  <script>
    function submitData() {
      var data = {
        name: "Alice",
        age: 30,
        email: "alice@example.com"
      };

      var jsonData = JSON.stringify(data);

      fetch("http://127.0.0.1:3000/account", {
        method: "POST",
        headers: {
          "Content-Type": "application/json"
        },
        body: jsonData
      })
      .then(response => response.json())
      .then(data => {
        console.log(data);
        // 处理成功响应
      })
      .catch(error => {
        console.error(error);
        // 处理错误情况
      });
    }
  </script>
</head>
<body>
  <button onclick="submitData()">提交数据</button>
</body>
</html>

(3.2)url编码格式的请求,可以通过form表单标签发出,也可以通过Ajax通信(包括XMLHttpRequest 和 Fetch API )发出。

<!--通过form标签发送url编码格式的请求 -->

<!DOCTYPE html>
<html>
<head>
  <title>Submit Form Example</title>
</head>
<body>
  <form action="http://127.0.0.1:3000/account" method="POST">
    <label for="name">Name:</label>
    <input type="text" id="name" name="name" required>

    <label for="age">Age:</label>
    <input type="number" id="age" name="age" required>

    <label for="email">Email:</label>
    <input type="email" id="email" name="email" required>

    <input type="submit" value="Submit">
  </form>
</body>
</html>

<!--通过XMLHttpRequest发送url编码格式的请求 -->

<!DOCTYPE html>
<html>
<head>
  <title>XMLHttpRequest URL Encoded Request</title>
  <script>
    function sendRequest() {
      var xhr = new XMLHttpRequest();
      xhr.open("POST", "http://127.0.0.1:3000/endpoint");
      xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

      var data = "param1=" + encodeURIComponent("value1") + "&param2=" + encodeURIComponent("value2");

      xhr.onreadystatechange = function() {
        if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
          console.log(xhr.responseText);
          // 处理成功响应
        } else {
          console.error(xhr.statusText);
          // 处理错误情况
        }
      };

      xhr.send(data);
    }
  </script>
</head>
<body>
  <button onclick="sendRequest()">Send Request</button>
</body>
</html>
<!--通过Fetch API发送url编码格式的请求 -->

<!DOCTYPE html>
<html>
<head>
  <title>Fetch API URL Encoded Request</title>
  <script>
    function sendRequest() {
      var url = "http://127.0.0.1:3000/endpoint";
      var data = {
        param1: "value1",
        param2: "value2"
      };

      var encodedData = new URLSearchParams(data).toString();

      fetch(url, {
        method: "POST",
        headers: {
          "Content-Type": "application/x-www-form-urlencoded"
        },
        body: encodedData
      })
      .then(function(response) {
        if (response.ok) {
          return response.text();
        } else {
          throw new Error(response.statusText);
        }
      })
      .then(function(result) {
        console.log(result);
        // 处理成功响应
      })
      .catch(function(error) {
        console.error(error);
        // 处理错误情况
      });
    }
  </script>
</head>
<body>
  <button onclick="sendRequest()">Send Request</button>
</body>
</html>

4,后端express解析请求体使用的中间件

app.use(express.json());   //解析json格式的请求体的中间件
app.use(express.urlencoded({ extended: false })); //解析url编码格式的请求体的中间件

另外,两种格式的请求体都可以使用formidable模块解析

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Delphi 11中同时发送JSON数据和查询参数的POST请求,可以按照以下示例代码进行操作: ```delphi uses System.Net.HttpClient, System.Net.URLClient, System.JSON; var HTTPClient: TNetHTTPClient; URL: string; RequestContent: TJSONObject; QueryParams: TStringList; ResponseContent: string; begin HTTPClient := TNetHTTPClient.Create(nil); RequestContent := TJSONObject.Create; QueryParams := TStringList.Create; try // 构建请求JSON数据 RequestContent.AddPair('key1', 'value1'); RequestContent.AddPair('key2', 'value2'); // 添加查询参数 QueryParams.AddPair('param1', 'value1'); QueryParams.AddPair('param2', 'value2'); // 构建URL并将查询参数编码为URL编码格式 URL := 'http://www.example.com'; URL := TNetEncoding.URL.EncodeQuery(URL, QueryParams); // 设置请求头为application/json HTTPClient.ContentType := 'application/json'; // 发送POST请求 ResponseContent := HTTPClient.Post(URL, RequestContent.ToString).ContentAsString; // 处理响应内容 ShowMessage(ResponseContent); finally RequestContent.Free; QueryParams.Free; HTTPClient.Free; end; end; ``` 在上述示例中,我们首先创建了TNetHTTPClient对象HTTPClient、TJSONObject对象RequestContent和TStringList对象QueryParams。然后,我们使用`AddPair`方法将键值对添加到RequestContent中,以构建请求JSON数据。接下来,我们使用`AddPair`方法将查询参数添加到QueryParams中。然后,我们构建URL,并使用TNetEncoding.URL.EncodeQuery方法将查询参数编码为URL编码格式。接着,我们设置请求的Content-Type为`application/json`。最后,我们使用TNetHTTPClient的`Post`方法发送带有JSON数据和查询参数的POST请求,并获取响应内容。 希望这个示例对您有所帮助!如果您有任何其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值