gpt4 book ai didi

json - POST 请求负载的内容类型

转载 作者:数据小太阳 更新时间:2023-10-29 03:30:47 24 4
gpt4 key购买 nike

我在 POST 请求中发送了一个 JSON 正文,但 http.DetectContentType 将其识别为文本/纯文本类型。

我希望能够根据内容类型灵活地处理请求负载 - if XML {} if JSON {} else {NO Processing}

为了实现这种条件处理,我使用 http.DetectContentType 来返回请求的内容类型,但它在每种情况下都返回文本/纯文本。

func Test(w http.ResponseWriter, r *http.Request) *ErrorObject {

reqBuffer := make([]byte, 512)
_, err := r.Body.Read(reqBuffer)
if err != nil {

return ErrorObject{}.New(1, err, nil)
}

contentType := GetContentType(reqBuffer)
fmt.Printf(contentType)

if contentType == "application/xml" || contentType == "text/xml" {
w.Header().Set("Content-Type", "application/xml; charset=UTF-8") ...}
if contentType == "application/json" || contentType == "text/json" {
w.Header().Set("Content-Type", "application/json; charset=UTF-8") ... }
else return Invalid Request Type error
}

func GetContentType(buffer []byte) string {

fmt.Println(string(buffer))
contentType := http.DetectContentType(buffer)
fmt.Printf(contentType)
return contentType

}

期望返回函数 - 内容类型为 application/json 但得到的是 text/plain

使用 POSTMAN 以 Body 作为原始数据和 JSON 向服务器发送请求

    {
"data": [
{
"group": "TEST",
"name": "TEST",
"released": true,
"version": 1,
"teststeps": [
{
"bin": 32,
"comment": "PAA",
"dataType": "J",
"format": "R6.2",
"id": "PAA3",
"osg": 8,
"usg": 0
}
],
"parameters": [
{
"comment": "test",
"description": "test",
"format": "R7.0",
"id": 1,
"teststepId": "PAA",
"value": 30,
"type": "teststep"
}
]
}
]
}

最佳答案

I am using http.DetectContentType to return the content type o the request but it is returning text/plain is every scenario.

根据documentation DetectContentType “...实现 https://mimesniff.spec.whatwg.org/ 中描述的算法以确定给定数据的内容类型”。该算法主要用于处理浏览器可以自行处理的内容类型。

如果你看at the actual code你会看到它根本不关心 application/json 或类似的东西,它返回 text/plain 任何看起来非二进制的东西(并且不匹配之前与 text/html 一样)。

换句话说:这是错误的工具。正确的方法是让客户端使用 Content-Type header 指定要发送的内容类型,而不是让服务器猜测内容的类型。

关于json - POST 请求负载的内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56634501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com