9

我通过 XMLHttpRequest 发送帖子数据:

var xmlHttp=new XMLHttpRequest();
xmlHttp.open("POST", domain, true);
xmlHttp.setRequestHeader("Content-type","multipart/form-data");
var formData = new FormData();  
formData.append("data", data_json_string);
xmlHttp.send(formData);

在 Python 中,如果我尝试获取 POST(或 FILES 或任何东西)数据,则会出现错误:

MultiPartParserError: Invalid boundary in multipart: None

这永远都行不通??我真的需要将表单主体创建为单个字符串,在其中循环遍历参数并在每个参数之前和之后放置一个边界字符串吗?如果是这样,那应该是什么样子?如何从 Python 中的 POST 中获取它?或者有没有更简单的方法。我环顾四周,并没有找到太多关于此的内容。

顺便说一句,我正在使用“multipart/form-data”,因为我的字符串数据非常长,这是一种更快的发送方式。当我创建表单并将其发布到 iframe 时,它​​对我有用。但在这里我更喜欢xmlHttp。

4

1 回答 1

13

不要Content-Type自己设置标题。它会在.send()读取数据时正确设置,包括您手动生成的标题所缺少的正确生成的边界。

规范明确指出将.send(FormData)使用多部分/表单数据编码。

如果数据是 FormData

让请求实体主体是运行 multipart/form-data 编码算法的结果,其中数据作为表单数据集,UTF-8 作为显式字符编码。

设 mime 类型为“multipart/form-data;”、U+0020 SPACE 字符、“boundary=”和 multipart/form-data 编码算法生成的 multipart/form-data 边界字符串的串联。

于 2013-09-03T11:06:24.813 回答