全部产品
云市场
云游戏

网络

更新时间:2020-09-11 14:52:14

my.request

小程序网络请求。

  • my.request 目前支持 GET/POST/PUT/DELETE
  • my.request 目前只支持 HTTPS 协议的请求。
说明
  • 基础库 1.11.0 及以上版本支持该接口 可以使用 my.canIUse('request') 做兼容性处理。详见 小程序基础库说明
  • mPaaS 10.1.60 及以上版本支持该接口。
  • 接口 my.httpRequest 将被废弃,请使用 my.request 来代替。
  • my.request 的请求头默认值为 {'content-type': 'application/json'},而不是 {'content-type': 'application/x-www-form-urlencoded'}。此外,请求头对象里面的 key 和 value 必须是 String 类型。

更多问题请参见 my.request 常见问题

使用说明

  • 需预先在 小程序发布 > 开放平台小程序管理 中打开下图中的 小程序权限控制开关,并在 服务器域名白名单 中配置域名白名单。小程序在以下 API 调用时只能与白名单中的域名进行通讯:HTTP 请求(my.request)、上传文件(my.uploadFile)。
    whitelist
  • 添加服务器域名白名单后,需要重新打包上传生成体验版,服务器域名才会生效。
  • 在 IDE 上进行调试时,请使用真机预览调试。

入参

名称 类型 必填 描述
url String 目标服务器 url
headers Object 设置请求的 HTTP 头,默认为 {'content-type': 'application/json'},该对象中的 key 和 value 必须是 String 类型。
method String 默认为 GET,目前支持 GET/POST/PUT/DELETE。
data Object / ArrayBuffer data 参数说明
timeout Number 超时时间,单位为 ms,默认为 30000
dataType String 期望返回的数据格式,默认为 json,支持 json、text、base64 和 arraybuffer。
success Function 调用成功的回调函数
fail Function 调用失败的回调函数
complete Function 调用结束的回调函数(调用成功、失败都会执行)

data 参数说明

传给服务器的数据最终会是 String 类型,如果数据不是 String 类型,会被转换成 String 。转换规则如下:

  • 若方法为GET,会将数据转换成 query string: encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...
  • 若方法为 POSTheaders['content-type']application/json ,会对数据进行 JSON 序列化。
  • 若方法为 POSTheaders['content-type']application/x-www-form-urlencoded ,会将数据转换成 query string: encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...

referer 说明

  • 网络请求的 referer Header 不可设置。
  • 其格式固定为 https://urlhost/{appid}/{version}/page-frame.html,其中 {appid} 为小程序的 APPID,{version} 为小程序的版本号。

success 返回值

名称 类型 描述
data String 响应数据,格式取决于请求时的 dataType 参数
status Number 响应码
headers Object 响应头

错误码

错误码 描述 解决方案
1 请求没有结束,就跳转到了另一个页面 建议请求完成后再进行页面跳转
2 参数错误。
  • 可能是链接过长导致,建议参数放在 data 中处理。
  • 建议检查请求时传递的数据是否正常,格式是否正确,可以在请求前打印下入参数据日志。
11 无权跨域 检查请求域名是否添加了域名白名单,开发版测试可以点击 IDE 右上角 > 详情,勾选 忽略 httpRequest 域名合法性检查
注意:新版本上架,一定要添加 服务器域名白名单,否则会出现异常。
12 网络出错 建议检查网络环境是否正常,服务器是否稳定。
13 超时 建议检查网络环境是否正常,服务器是否正常响应,若请求需要时间长,可适当设置超时时间 timeout。
14 解码失败 建议检查前后端请求和响应数据格式是否一致。如返回数据格式 text 与入参 dataType 值 JSON 不一致而导致接口报错,请修改后台返回数据格式为 JSON。
15 传参失败。 小程序页面传参如果做 urlencode 需要把整体参数进行编码。
19 HTTP 错误
  • 请确认请求 URL 地址在外网是否能正常请求 HTTPS 协议,小程序真机中均为线上环境的正式请求,不能使用局域网本地请求。
  • 如遇见 HTTP 404、500、504 等异常错误,建议打开 IDE 调试器 > Network 以查看具体的错误信息,然后根据对应 HTTP 错误码对症处理。
  • SSL 证书不正确导致,建议更换网站 SSL 证书。
20 请求已被停止/服务端限流 请确认请求服务器是否能正常请求和响应。
23 代理请求失败。 建议检查代理配置是否正确。
说明:当入参 dataType 值为 json 时,小程序框架会先对返回结果做 JSON.prase 操作,如果解析失败,则会返回 error 为 14 的错误。当入参 dataType 值为 text 时,如果返回的内容格式不符,也会返回 error 为 14 的错误。遇到此错误时,请先检查 dataType 的设置是否正确。


my.request 调用返回 无权调用该接口,则需要在 开放平台小程序管理 > 服务器域名白名单 中配置域名白名单。

whitelist

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. my.request({
  2. url: 'https://httpbin.org/post',
  3. method: 'POST',
  4. data: {
  5. from: '支付宝',
  6. production: 'AlipayJSAPI',
  7. },
  8. dataType: 'json',
  9. success: function(res) {
  10. my.alert({content: 'success'});
  11. },
  12. fail: function(res) {
  13. my.alert({content: 'fail'});
  14. },
  15. complete: function(res) {
  16. my.hideLoading();
  17. my.alert({content: 'complete'});
  18. }
  19. });
  20. // 返回RequestTask,可以调用abort方法取消请求
  21. const task = my.request({url: 'https://httpbin.org/post'})
  22. task.abort()

返回值

RequestTask

网络请求任务对象。

方法

RequestTask.abort()

my.uploadFile

说明:mPaaS 10.1.32 及以上版本支持该接口。


上传本地资源到开发者服务器。

使用说明

  • 需预先在 开放平台小程序管理 > 服务器域名白名单 中配置域名白名单。小程序在以下 API 调用时只能与白名单中的域名进行通讯:HTTP 请求(my.request)、上传文件(my.uploadFile)。 whitelist

入参

名称 类型 必填 描述
url String 开发者服务器地址
filePath String 要上传文件资源的本地定位符
fileName String 文件名,即对应的 key, 开发者在服务器端通过这个 key 可以获取到文件二进制内容
fileType String 文件类型,image/video/audio
hideLoading Bool 是否隐藏 loading 图(默认值为 false)
header Object HTTP 请求 Header
formData Object HTTP 请求中其他额外的 form 数据
success Function 调用成功的回调函数
fail Function 调用失败的回调函数
complete Function 调用结束的回调函数(调用成功、失败都会执行)

success 返回值

名称 类型 描述
data String 服务器返回的数据
statusCode String HTTP 状态码
header Object 服务器返回的 Header

错误码

error 描述 解决方案
11 文件不存在 检查本地文件是否存在
12 上传文件失败 检查网络和服务器
13 没有权限 检查权限设置

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. my.uploadFile({
  2. url: '请使用自己服务器地址',
  3. fileType: 'image',
  4. fileName: 'file',
  5. filePath: '...',
  6. success: (res) => {
  7. my.alert({
  8. content: '上传成功'
  9. });
  10. },
  11. });

UploadTask

监听上传进度变化,取消上传任务的对象。

方法

方法 描述
UploadTask.abort() 中断上传任务
UploadTask.onProgressUpdate(function callback) 监听上传进度变化事件

代码示例

  1. const task = my.uploadFile({
  2. url: '请使用自己服务器地址',
  3. fileType: 'image',
  4. fileName: 'file',
  5. filePath: '...',
  6. });
  7. task.onProgressUpdate(({progress, totalBytesWritten, totalBytesExpectedToWrite}) => {
  8. })
  9. task.abort()

常见问题

  • Q:小程序上传图片可以自动转成 Base64 (基于 64 个可打印字符来表示二进制数据的方法)吗?
    A:小程序暂不支持图片转成 Base64。
  • Q:my.uploadFile 如何获取服务器返回的错误信息?
    A:
    • 可以通过 success 回调中的 data 参数获取。
    • 可以在服务端增加一个日志获取接口。如果上传失败,就请求到日志获取接口获取详细的失败日志。
  • Q:my.uploadFile 默认超时时间是多长?是否可以设置默认延长时间?
    A:my.uploadFile 默认超时时间是 30s,目前无法设置默认延长时间。
  • Q:使用 my.uploadFile 上传文件,为何报错 error:12
    A:上传失败导致报错 error:12,造成上传失败的可能原因有:
    • 文件过大。
    • 上传时间超过 30s。
    • 没有权限。
  • Q:使用 my.uploadFile 上传图片至后台,接收的是二进制图片,再从后台发送小程序前台对应的二进制图片,小程序前台是如何解析的?
    A:上传图片是后端通过二进制流接受图片,之后后端只需提供对应的图片在服务器上的位置地址即可。
  • Q:调用 my.uploadfile,为何报错 error: 4,无权限调用此接口?
    A:请求的 URL 没有配置白名单,建议添加 URL 的域名为白名单。
  • Q:小程序是否支持上传 excel 文件?
    A:目前 my.uploadFile 上传文件类型支持图片、视频、音频( image / video / audio),暂不支持其他类型的文件。
  • Q:my.uploadFile 是否支持多张图片同时上传? A:my.uploadFile 暂不支持多张图片同时上传,一次只能上传一张图片。

my.downloadFile

说明:mPaaS 10.1.32 及以上版本支持该接口。


下载文件资源到本地。

入参

名称 类型 必填 描述
url String 下载文件地址
header Object HTTP 请求 Header
success Function 调用成功的回调函数
fail Function 调用失败的回调函数
complete Function 调用结束的回调函数(调用成功、失败都会执行)

success 返回值

名称 类型 描述
apFilePath String 文件临时存放的位置

错误码

error 描述 解决方案
12 下载失败 建议检查网络和服务器
13 没有权限 建议检查权限
20 请求的 URL 不支持 HTTP 建议将请求的 URL 改成 HTTPS

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. // API-DEMO page/API/download-file/download-file.json
  2. {
  3. "defaultTitle": "下载文件"
  4. }
  1. <!-- API-DEMO page/API/download-file/download-file.axml-->
  2. <view class="container">
  3. <button onTap="download">下载图片并显示</button>
  4. </view>
  1. // API-DEMO page/API/download-file/download-file.js
  2. Page({
  3. download() {
  4. my.downloadFile({
  5. url: 'https://img.alicdn.com/tfs/TB1x669SXXXXXbdaFXXXXXXXXXX-520-280.jpg',
  6. success({ apFilePath }) {
  7. my.previewImage({
  8. urls: [apFilePath],
  9. });
  10. },
  11. fail(res) {
  12. my.alert({
  13. content: res.errorMessage || res.error,
  14. });
  15. },
  16. });
  17. },
  18. })

my.connectSocket

说明:mPaaS 10.1.60 及以上版本支持该接口。


创建一个 WebSocket 的连接。

一个小程序同时只能保留一个 WebSocket 连接,如果当前已存在 WebSocket 连接,会自动关闭该连接,并重新创建一个新的 WebSocket 连接。

入参

名称 类型 必填 描述
url String 目标服务器 URL。
注意:部分新发布的小程序只支持 wss 协议。
data Object 请求的参数
header Object 设置请求的头部
success Function 调用成功的回调函数
fail Function 调用失败的回调函数
complete Function 调用结束的回调函数(调用成功、失败都会执行)

错误码

error 描述 解决方案
1 未知错误 -
2 网络连接已经存在 一个小程序在一段时间内只能保留一个 WebSocket 连接。如果当前已存在 WebSocket 连接,那么会自动关闭该连接,并重新创建一个新的 WebSocket 连接。
3 URL 参数为空 替换 URL 链接。
4 无法识别的 URL 格式 替换 URL 链接。
5 URL 必须以 ws 或者 wss 开头 替换 URL 链接。
6 连接服务器超时 稍后重试。
7 服务器返回的 https 证书无效 小程序必须使用 HTTPS/WSS 发起网络请求。请求时系统会对服务器域名使用的 HTTPS 证书进行校验,如果校验失败,则请求不能成功发起。由于系统限制,不同平台对于证书要求的严格程度不同。为了保证小程序的兼容性,建议开发者按照最高标准进行证书配置,并使用相关工具检查现有证书,确保其符合要求。
8 服务端返回协议头无效 从 2019 年 5 月开始新创建的小程序,默认强制使用 HTTPS 和 WSS 协议,不再支持 HTTP 和 WS 协议。
9 WebSocket 请求没有指定 Sec-WebSocket-Protocol 请求头 请指定 Sec-WebSocket-Protocol 请求头。
10 网络连接没有打开,无法发送消息 请正常连接服务器后再调用 my.sendSocketMessage 发送数据消息,可通过 my.onSocketOpen 监听事件来判断与服务器建立正确连接。
注意:通过 WebSocket 连接发送数据,需要先使用 my.connectSocket 发起连接,在 my.onSocketOpen 回调之后再调用 my.sendSocketMessage 发送数据。
11 消息发送失败 稍后重试。
12 无法申请更多内存来读取网络数据 请检查内存。

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. my.connectSocket({
  2. url: 'test.php',
  3. data: {},
  4. header:{
  5. 'content-type': 'application/json'
  6. },
  7. });

my.onSocketOpen

说明:mPaaS 10.1.60 及以上版本支持该接口。


监听 WebSocket 连接打开事件。

入参

Object 类型,属性如下:

属性 类型 必填 说明
callback Function WebSocket 连接打开事件的回调函数。

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. my.connectSocket({
  2. url: 'test.php',
  3. });
  4. my.onSocketOpen(function(res) {
  5. console.log('WebSocket 连接已打开!');
  6. });

my.offSocketOpen

说明:mPaaS 10.1.60 及以上版本支持该接口。


取消监听 WebSocket 连接打开事件。

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. Page({
  2. onLoad() {
  3. this.callback = this.callback.bind(this);
  4. my.onSocketOpen(this.callback);
  5. },
  6. onUnload() {
  7. my.offSocketOpen(this.callback);
  8. },
  9. callback(res) {
  10. },
  11. })

是否需要传 callback 值

  • 不传递 callback 值,则会移除监听所有的事件回调。代码示例如下:

    1. my.offSocketOpen();
  • 传递 callback 值,只移除对应的 callback 事件。代码示例如下:

    1. my.offSocketOpen(this.callback);

my.onSocketError

说明:mPaaS 10.1.60 及以上版本支持该接口。


监听 WebSocket 错误。

入参

Obejct 类型,属性如下:

参数 类型 必填 说明
callback Function WebSocket 错误事件的回调函数。

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. my.connectSocket({
  2. url: '开发者的服务器地址'
  3. });
  4. my.onSocketOpen(function(res){
  5. console.log('WebSocket 连接已打开!');
  6. });
  7. my.onSocketError(function(res){
  8. console.log('WebSocket 连接打开失败,请检查!');
  9. });

my.offSocketError

说明:mPaaS 10.1.60 及以上版本支持该接口。


取消监听 WebSocket 错误。

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. Page({
  2. onLoad() {
  3. this.callback = this.callback.bind(this);
  4. my.onSocketError(this.callback);
  5. },
  6. onUnload() {
  7. my.offSocketError(this.callback);
  8. },
  9. callback(res) {
  10. },
  11. })

是否需要传 callback 值

  • 不传递 callback 值,则会移除监听所有的事件回调。代码示例如下:

    1. my.offSocketError();
  • 传递 callback 值,只移除对应的 callback 事件。代码示例如下:

    1. my.offSocketError(this.callback);

my.sendSocketMessage

说明:mPaaS 10.1.60 及以上版本支持该接口。


通过 WebSocket 连接发送数据,需要先使用 my.connectSocket 发起建连,并在 my.onSocketOpen 回调之后再发送数据。

入参

名称 类型 必填 描述
data String 需要发送的内容:普通的文本内容 String 或者经 base64 编码后的 String。
isBuffer Boolean 如果需要发送二进制数据,需要将入参数据经 base64 编码成 String 后,赋值 data,同时将此字段设置为 true,否则,若为普通的文本内容 String,则不需要设置此字段。
success Function 回调函数。
fail Function 调用失败的回调函数。
complete Function 调用结束的回调函数(调用成功、失败都会执行)。

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. my.sendSocketMessage({
  2. data: this.data.toSendMessage, // 需要发送的内容
  3. success: (res) => {
  4. my.alert({content: '数据发送!' + this.data.toSendMessage});
  5. },
  6. });

my.onSocketMessage

说明:mPaaS 10.1.60 及以上版本支持该接口。


监听 WebSocket 接受到服务器的消息事件。

回调返回值

名称 类型 描述
data String/ArrayBuffer 服务器返回的消息:普通的文本 String 或者经 base64 编码后的 String。
isBuffer Boolean 如果此字段值为 truedata 字段表示接收到的经过了 base64 编码后的 String,否则,data 字段表示接收到的普通 String 文本。

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. my.connectSocket({
  2. url: '服务器地址'
  3. })
  4. my.onSocketMessage(function(res) {
  5. console.log('收到服务器内容:' + res.data)
  6. })

my.offSocketMessage

说明:mPaaS 10.1.60 及以上版本支持该接口。


取消监听 WebSocket 接受到服务器的消息事件。

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. my.connectSocket({
  2. url: '服务器地址'
  3. })
  4. my.onSocketMessage(function(res) {
  5. console.log('收到服务器内容:' + res.data)
  6. })
  7. my.offSocketMessage();

是否需要传 callback 值

  • 不传递 callback 值,则会移除监听所有的事件回调。代码示例如下:

    1. my.offSocketMessage();
  • 传递 callback 值,只移除对应的 callback 事件。代码示例如下:

    1. my.offSocketMessage(this.callback);

my.closeSocket

说明:mPaaS 10.1.60 及以上版本支持该接口。


关闭 WebSocket 连接。

入参

名称 类型 必填 描述
success Function 回调函数
fail Function 调用失败的回调函数
complete Function 调用结束的回调函数(调用成功、失败都会执行)

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. my.onSocketOpen(function() {
  2. my.closeSocket()
  3. })
  4. my.onSocketClose(function(res) {
  5. console.log('WebSocket 已关闭!')
  6. })

my.onSocketClose

说明:mPaaS 10.1.60 及以上版本支持该接口。


监听 WebSocket 关闭。

入参

Obejct 类型,属性如下:

参数 类型 必填 描述
callback Function WebSocket 连接关闭事件的回调函数。

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. onLoad() {
  2. // 注意: 回调方法的注册在整个小程序启动阶段只要做一次,调多次会有多次回调
  3. my.onSocketClose((res) => {
  4. my.alert({content: '连接已关闭!'});
  5. this.setData({
  6. sendMessageAbility: false,
  7. closeLinkAbility: false,
  8. });
  9. });
  10. // 注意: 回调方法的注册在整个小程序启动阶段只要做一次,调多次会有多次回调
  11. my.onSocketOpen((res) => {
  12. my.alert({content: '连接已打开!'});
  13. this.setData({
  14. sendMessageAbility: true,
  15. closeLinkAbility: true,
  16. });
  17. });
  18. my.onSocketError(function(res){
  19. my.alert('WebSocket 连接打开失败,请检查!' + res);
  20. });
  21. // 注意: 回调方法的注册在整个小程序启动阶段只要做一次,调多次会有多次回调
  22. my.onSocketMessage((res) => {
  23. my.alert({content: '收到数据!' + JSON.stringify(res)});
  24. });
  25. }
  26. connect_start() {
  27. my.connectSocket({
  28. url: '服务器地址', // 开发者服务器接口地址,必须是 wss 协议,且域名必须是后台配置的合法域名
  29. success: (res) => {
  30. my.showToast({
  31. content: 'success', // 文字内容
  32. });
  33. },
  34. fail:()=>{
  35. my.showToast({
  36. content: 'fail', // 文字内容
  37. });
  38. }
  39. });
  40. },

my.offSocketClose

说明:mPaaS 10.1.60 及以上版本支持该接口。


取消监听 WebSocket 关闭。

代码示例

案例仅供参考,建议使用您自己的地址进行测试。

  1. Page({
  2. onLoad() {
  3. my.onSocketClose(this.callback);
  4. },
  5. onUnload() {
  6. my.offSocketClose(this.callback);
  7. // my.offSocketClose();
  8. },
  9. callback(res) {
  10. my.alert({content: '连接已关闭!'});
  11. this.setData({
  12. sendMessageAbility: false,
  13. closeLinkAbility: false,
  14. });
  15. },
  16. })

是否需要传 callback 值

  • 不传递 callback 值,则会移除监听所有的事件回调。示例代码如下:

    1. my.offSocketClose();
  • 传递 callback 值,只移除对应的 callback 事件。示例代码如下:

    1. my.offSocketClose(this.callback);