api - 当在 POST 中给出 Content-length 标头时,REST API 响应 400 Bad request
问题描述
我有一个网站和一个 python 烧瓶 RESTFUL API。当使用 Postman 测试 API 时它工作得很好,但是在 js 中使用 XMLHttprequest 的相同请求给了我一个 400 BAD Request 代码。我查看了发送的标头并在 Postman 中复制了 XMLHttprequest 标头,以获得 400 BAD REQUEST Code。如果我从请求中删除 Content-Length 标头,它工作正常。我的邮递员代码(HTML,没有内容长度):
POST /user/181453766040485888 HTTP/1.1
Host: 127.0.0.1:5000
Content-Type: multipart/form-data; boundary=---
-WebKitFormBoundary7MA4YWxkTrZu0gW
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keeep-alive
Host: 127.0.0.1:5000
Origin: http://localhost:52014
Referer: http://localhost:52014/settings.php
User-Agent: Mozilla/5.0 (Windows NT 10.0;
Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 OPR/57.0.3098.106 (Edition Campaign 76)
cache-control: no-cache
Postman-Token: 5dd34b0b-965c-4d31-83b9-2364b03c0aa2
Content-Disposition: form-data; name="status"
0
Content-Disposition: form-data; name="username"
0
Content-Disposition: form-data; name="token"
0
Content-Disposition: form-data; name="display_names"
1
Content-Disposition: form-data; name="messages"
1
Content-Disposition: form-data; name="roles"
1
Content-Disposition: form-data; name="votes"
1
------WebKitFormBoundary7MA4YWxkTrZu0gW--
我的 js 函数(用于测试):
function save() {
var formData = new FormData();
formData.append("status", 0);
formData.append("username", 0);
formData.append("token", 0);
formData.append("display_names", 0);
formData.append("messages", 0);
formData.append("roles", 0);
formData.append("votes", 0);
const Http = new XMLHttpRequest();
const url='http://127.0.0.1:5000/user/181453766040485888';
Http.open("POST", url);
Http.onreadystatechange=(e)=>{
console.log(Http.responseText)
}
Http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
Http.send(formData);
}
我处理请求的 API 函数(摘要):
def post(self, id):
if database.execute(database.SAVE_USER_SETTINGS.format(id, request.form["status"], request.form["username"],
request.form["token"], request.form["display_names"],
request.form["messages"], request.form["roles"],
request.form["votes"])):
return (id, request.form["status"], request.form["username"],
request.form["token"], request.form["display_names"],
request.form["messages"], request.form["roles"],
request.form["votes"]), 201
return {}, 500
解决方案
推荐阅读
- android - Android Native 在 tgkill 崩溃和 Native 在 abort 崩溃
- apache-flink - Flink CEP:java.lang.NoSuchMethodError
- javascript - 在下拉列表中选择值时隐藏文本字段
- pdf-generation - 在自定义 pdf Prestashop 中隐藏页眉和页脚
- angular - API 轮询和超时
- java - 在控制器中接受请求时发生 json 解析错误
- jquery - 如何从进行 ajax 调用中排除页面
- php - 使用 JMS Serializer 在 symfony 4 中反序列化 xml
- c# - 更改 Windows 状态后,ScrollViewer 上的最后一项被截断
- web-services - 如何将值从 html 页面传递到简单的 java 类