request 无法使用multipart/form-data来请求
发布于 5 年前 作者 chengchao 6026 次浏览 来自 问答

在微信小程序中,http请求为multipart/form-data在wx.request 的请求中Cookie一直是失效,只能通过uploadfile来完成这样的请求,但是只是想传递Content-Typemultipart/form-data的String类型(不带图片)又无法传递。

header: {

“Content-Type”: “multipart/form-data”,

“Cookie”: “JSESSIONID=wKgByBroW8_nOOyBu8CynkHZs3MbTA2vYoEA”

}

这样

这到底是什么毛病。应该怎么做,求解答。

3 回复

您好,我也发现有这个问题,我们的一个接口要求post的数据是form-data格式的,wx.request 设置header的 content-type 为  multipart/form-data,发现数据传不到后台,用Charles 抓包,发现一个错误,后台返回 no multipart boundary was found,

Charles 显示的请求头确实没有 boundary, 如下:

POST /mindoffice/visitor_unreservations/subscribeBill HTTP/1.1
Host: qas.zjzlnet.com
Content-Length: 20
Pragma: no-cache
Cache-Control: no-cache
Origin: http://127.0.0.1:34785
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 wechatdevtools/1.02.1809111 MicroMessenger/6.5.7 Language/zh_CN webview/ token/61f11dc1d5bc1cfd264bbe33ae8d2f95
content-type: multipart/form-data
Accept: */*
Referer: https://servicewechat.com/wx04c25e121b8ce5df/devtools/page-frame.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Connection: keep-alive
 
{"data":"test data"}

正确的请求头应该如下:

POST /mindoffice/visitor_unreservations/subscribeBill HTTP/1.1
Content-Type: multipart/form-data; boundary=7f81e6d3-da78-4610-82b5-b4906d630ab3
Content-Length: 407
Host: 115.29.7.124
Accept-Encoding: gzip
User-Agent: okhttp/3.6.0
Connection: keep-alive
 
--7f81e6d3-da78-4610-82b5-b4906d630ab3
content-disposition: form-data; name="data"
Content-Length: 255
 
test data
--7f81e6d3-da78-4610-82b5-b4906d630ab3--

有一对boundary包裹着上传的data

然而,wx.request 发出的请求并没有boundary ,故而报错;

看到楼上的答复,wx.uploadFile支持 multipart/form-data;

但是我并不需要传文件。。只是传键值对。。

请求官方给与答复,谢谢

楼主你解决这个问题了吗?

因为地址是用的我们本地的域名,所以直接粘到这里里

wx.uploadFile({

url: ‘http://********’,

// filePath: that.data.Images[0].url,

filePath: that.data.Images[0].url,

name: ‘uploadfile_ant’,

formData: {

“info”: “aaaa”,

“longti”: “0.0”,

“lati”: “0.0”,

“prio”: “aa”,

“username”: “aaaa”,      

},

header: {

“Content-Type”: “multipart/form-data”,

“Cookie”:“JSESSIONID=wKgByBroW8_nOOyBu8CynkHZs3MbTA2vYoEA”

},

})

这样是可以执行的,但是图片地址不能为空

但是

wx.request({

url: ‘http://******’,

data: {

“info”: “aaaa”,

“longti”: “0.0”,

“lati”: “0.0”,

“prio”: “aa”,

“username”: “aaaa”,

},

method: “POST”,

header: {

“Content-Type”: “multipart/form-data”,

“Cookie”: “JSESSIONID=wKgByBroW8_nOOyBu8CynkHZs3MbTA2vYoEA”

},

success: function (res){

console.log(res);

},

fail: function () {

},

complete: function () {

}

})

这样cookie是传不过去的。

回到顶部