错误的内容类型标头,没有多部分边界nodejs

问题描述 投票:0回答:2

我有一个返回带有

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

正文是大块文本/字符串。

node.js multipartform-data superagent
2个回答
0
投票

根据RFC2045

...而“multipart”媒体类型的任何子类型都需要“boundary”参数。

在您的情况下,服务器没有设置该参数,因此响应无效,并且

superagent
(尝试解析响应)会抛出错误。

您也许可以使用替代 HTTP 客户端,前提是它不尝试解析

multipart/form-data
响应。

您可以使用内置的

http(s).get()
,或者
request
包。

编辑:如果您遇到

superagent
,那么您可以对其进行猴子修补,以便它检测到损坏的响应并将其视为
text/plain

在代码中的“高处”添加以下内容(在使用

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);
};

0
投票

正常情况下,在传递带有文件的多部分表单数据时,您需要设置边界,以防万一文件的大小大于所发出的请求。

  Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryyrV7KO0BoCBuDbTL

链接

© www.soinside.com 2019 - 2024. All rights reserved.