收藏
回答

request 无法使用multipart/form-data来请求

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug request multipart/form-data 客户端 6.5.3 2.0.0

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

header: {

"Content-Type": "multipart/form-data",

"Cookie": "JSESSIONID=wKgByBroW8_nOOyBu8CynkHZs3MbTA2vYoEA"

}

这样

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



最后一次编辑于  2018-10-24
回答关注问题邀请回答
收藏

3 个回答

  • ShinBlueCat
    ShinBlueCat
    2018-10-24

    麻烦给个相关的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html),我们定位下问题

    2018-10-24
    赞同
    回复 11
    • z1
      z1
      2018-10-25

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

      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是传不过去的。


      2018-10-25
      回复
    • ShinBlueCat
      ShinBlueCat
      2018-10-25回复z1

      麻烦按教程提供下,这样贴代码比较难查

      2018-10-25
      回复
    • 秦帅
      秦帅
      2018-10-30回复ShinBlueCat

      您好,我碰到了同样的问题,能看一下楼下我的回复吗?谢谢

      2018-10-30
      回复
    • z1
      z1
      2018-10-31

      正常用request执行 Content-Type为multipart/form-data的请求的时候,后台获取不到multipart请求的参数拒绝请求,但是如果用wx.uploadFile的话可以传参成功但是必须上传一张图片,目前用的是wx.uploadFile,有没有用wx.uploadFile只传递参数,不上传图片的方法?


      2018-10-31
      回复
    • 秦帅
      秦帅
      2018-10-31回复z1

      我楼上回的评论。。和你描述的一毛一样。。。同问。。。。

      2018-10-31
      回复
    查看更多(6)
  • 秦帅
    秦帅
    2018-10-30

    您好,我也发现有这个问题,我们的一个接口要求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;

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

    请求官方给与答复,谢谢

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

    2018-10-30
    赞同
    回复
  • z1
    z1
    2018-10-25

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

    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是传不过去的。


    2018-10-25
    赞同
    回复