我有一个返回content-type: "multipart/form-data; charset=utf-8"
内容的API。但是,在我的nodejs应用程序中,当我通过superagent
进行以下调用时:
request
.get(ApiUrl + id)
.set('Authorization', basicHttpAuth)
.set('client_id', clientId)
.set('client_secret', clientSecret)
.end(function (err, res) {
if (err) {
callback(null, err)
console.log(err);
}
else {
callback(null, res);
}
})
我收到此错误:
错误:内容类型标头错误,没有多部分边界
知道什么是错的吗?
堆栈追踪:
Error: bad content-type header, no multipart boundary
at IncomingForm._parseContentType (/Users/mike/Svr/Server/node_modules/formidable/lib/incoming_form.js:271:19)
at IncomingForm.writeHeaders (/Users/mike/Svr/Server/node_modules/formidable/lib/incoming_form.js:142:8)
at IncomingForm.parse (/Users/mike/Svr/Server/node_modules/formidable/lib/incoming_form.js:110:8)
at ClientRequest.<anonymous> (/Users/mike/Svr/Server/node_modules/superagent/lib/node/index.js:869:9)
at Object.onceWrapper (events.js:316:30)
at emitOne (events.js:115:13)
at ClientRequest.emit (events.js:210:7)
at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:564:21)
at HTTPParser.parserOnHeadersComplete (_http_common.js:116:23)
at TLSSocket.socketOnData (_http_client.js:453:20) response: undefined }
这是服务器响应标头:
Access-Control-Allow-Origin →*
Connection →keep-alive
Content-Length →44691
Content-Type →multipart/form-data; charset=utf-8
Date →Wed, 05 Jul 2017 03:44:23 GMT
身体是大块的文字/字符串。
答案 0 :(得分:0)
根据RFC2045:
...而“multipart”媒体类型的任何子类型都需要“boundary”参数。
在您的情况下,服务器不设置该参数,因此响应无效,superagent
(尝试解析响应)会引发错误。
您可以使用备用HTTP客户端,前提是它不会尝试解析multipart/form-data
个响应。
您可以使用内置的http(s).get()
或request
包。
编辑:如果您遇到superagent
,那么您可以对它进行monkeypatch,以便检测到损坏的响应并将其视为text/plain
。< / p>
在您的代码中使用“高位”添加以下内容(在使用superagent
之前):
const Utils = require('superagent/lib/utils');
const UtilsType = Utils.type;
Utils.type = function(type) {
if (type === 'multipart/form-data; charset=utf-8') {
type = 'text/plain; charset=utf-8';
}
return UtilsType.call(this, type);
};
答案 1 :(得分:0)
在传递带有文件的multipart-formdata时,通常需要设置边界,以防万一如果文件的大小大于请求的大小。
Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryyrV7KO0BoCBuDbTL