Postman form-data和x-www-form-urlencoded可以工作,但原始JSON不能

ijnw1ujt  于 2023-03-31  发布在  Postman
关注(0)|答案(2)|浏览(212)

我有一个表单,它将凭据发送到端点进行身份验证,它应该返回一个令牌。我想用javascript替换HTML表单,但我不能让它工作。为了找出为什么它不工作,我试着用Postman做同样的事情,我得到的结果是,当我发送POST请求时,身体作为表单数据,它工作正常。发送它作为x-www-form-urlencoded也工作正常,但是当我以json(Content-Type:“application/json”)则不会。
请求JSON数据:

{
    "username": "my_username",
    "password": "my_password",
    "referer": "http://127.0.0.1:5500",
    "f": "json"
}

my_password包含字母、点和下划线,但没有其他特殊字符。我的密码只有感叹号作为特殊字符。
端点是否可以区分发送的表单或javascript(fetch API)?另外,当发送json而不是其他两个选项时,端点是否无法工作?

atmip9wb

atmip9wb1#

端点是否可以区分发送的表单或javascript(获取API)?
不太喜欢。
如果它是一个跨域请求,那么JS将添加一个Origin头。
客户端代码也可以 * 显式地 * 添加不同的头。
有什么原因可以解释为什么一个端点在发送JSON而不是其他两个选项时无法工作?
如果端点没有被设计为解析JSON格式的请求。
听起来你把事情弄得太复杂了。
只需编写JS代码,使用application/x-www-form-urlencodedmultipart/form-data(因为它们是它支持的格式)而不是JSON发出POST请求。
您也可以重写端点以支持JSON。

osh3o9ms

osh3o9ms2#

我也面临着同样的问题。

错误的JSON格式(数值中未加双引号)。

{
  "boat_name": "harry",
  "cages": 1,
  "yield": 3,
  "weight": 2,
  "specie_name": "surf",
  "shift": "ek",
  "goal_for": "22-12-2023"
}

正确的JSON(在数值中加上双引号)

{
  "boat_name": "harry",
  "cages": "1",
  "yield": "3",
  "weight": "2",
  "specie_name": "surf",
  "shift": "ek",
  "goal_for": "22-12-2023"
}

相关问题