【小程序开发填坑记】 之 解决小程序真机调试时报错 request:fail -102:net::ERR_CONNECTION_REFUSED

解决小程序真机调试时报错request:fail -102:net::ERR_CONNECTION_REFUSED

    • 创作背景
    • 问题再现
      • 1. 后台接收不到 POST 请求
        • 问题代码
        • 解决思路
        • 解决方案
      • 2. 域名检查
        • 问题代码
        • 解决思路
    • 结果展示
    • 结尾

创作背景

  • 本菜鸡最近想开发个 微信小程序 ,说不定能参加个什么比赛,拿个奖之类的(虽然不太可能)
  • 但很不巧,因为从未开发过微信小程序,所以各种 bug 蜂拥而至,妄图将我击退
  • 可我不甘示弱,顽强的坚持到了现在
  • 写下这篇文章以帮助自己及各位解决问题

问题再现

  • 本菜鸡使用的是 pythondjango 框架作为后台服务端
  • 首先,我想让用户使用我的小程序时进行登录操作(像绝大多数的小程序一样)
  • 所以我要 获得用户登录的 code,然后 利用 wx.request 将 code 发送给 django 后台进行用户登录操作,并 将结果反馈给我的小程序前端
  • 可我遇到了如下一坨坨问题 ┑( ̄Д  ̄)┍
  • 关键它们报的错都是 request:fail -102:net::ERR_CONNECTION_REFUSED /(ㄒoㄒ)/~~

1. 后台接收不到 POST 请求

问题代码

  • 问题代码如下
wx.request({
     
  url: 'http://127.0.0.1:9999/user/login',
  method: 'POST',
  data: {
     
    js_code: res.code
  },
  header: {
     
    'content-type': 'application/json'
  },
  success (res) {
     
    console.log(res);
    
  },
  fail (res) {
     
    console.log(res);
  }
})

在这里插入图片描述

  • 后台空空如也,什么请求都没有接收到

解决思路

  • 按照官方文档所述
    【小程序开发填坑记】 之 解决小程序真机调试时报错 request:fail -102:net::ERR_CONNECTION_REFUSED_第1张图片

解决方案

  • 因为是 POST 请求,所以 header 中的 content-type 改为 application/x-www-form-urlencoded
  • 本地编译后,后台成功接收到 POST 请求
  • 注:后台可能报错 Forbidden (CSRF cookie not set.)
    • 解决方案:把 settings.py 中的这一行注释掉
      【小程序开发填坑记】 之 解决小程序真机调试时报错 request:fail -102:net::ERR_CONNECTION_REFUSED_第2张图片

2. 域名检查

  • 本地编译成功后,我就启用了真机调试
  • 我本以为没有问题了,但还是报这个错,同样的,后台没有接收到任何请求

问题代码

  • 问题代码如下
wx.request({
     
  url: 'http://127.0.0.1:9999/user/login',
  method: 'POST',
  data: {
     
    js_code: res.code
  },
  header: {
     
    'content-type': 'application/x-www-form-urlencoded'
  },
  success (res) {
     
    console.log(res);
    
  },
  fail (res) {
     
    console.log(res);
  }
})

解决思路

  • 按照官方文档的描述(如图)
    【小程序开发填坑记】 之 解决小程序真机调试时报错 request:fail -102:net::ERR_CONNECTION_REFUSED_第3张图片
  1. wx.request 所发起的请求都是 https,发送 http 请求是不支持的,如果要支持的话,需要勾选如下图所示的选项
    【小程序开发填坑记】 之 解决小程序真机调试时报错 request:fail -102:net::ERR_CONNECTION_REFUSED_第4张图片
  2. 请求的 IP 不可以是 localhost 或者 127.0.0.1 ,只能是本机所属的局域网 IP
    • 这里的局域网 IP 指的是 要真机调试的手机和电脑在同一个局域网中,这时候 IP 可以使用电脑的 IP
    • 查看电脑 IP (以 Windows 操作系统为例)
      • windows 操作系统中使用 win+R 快捷键打开运行
      • 输入 cmd 打开命令行
      • 输入命令 ipconfig 即可查询得到本机的 IP
      • 或者在工具栏找到网络,右键 打开 “网络和 Internet 设置”
      • 点击 更改连接属性
      • 往下翻,IPV4 地址 即为所求
    • 以我的为例,我要请求的 url 应该改为 http://172.22.202.74:9999/user/login
  3. 同时,django 后台也要设置为 外部网络可以访问,设置方法如下
    • setting.py 中设置 ALLOWED_HOSTS = ['*']
    • 启动 django 项目时使用命令 python manage.py 0.0.0.0:【端口号】
    • 设置为 0.0.0.0 即为 任意IP均可访问

结果展示

【小程序开发填坑记】 之 解决小程序真机调试时报错 request:fail -102:net::ERR_CONNECTION_REFUSED_第5张图片

  • 成功解决 bug !!!



结尾

以上就是我要分享的内容,因为学识尚浅,会有不足,还请各位大佬指正。
有什么问题也可在评论区留言。
在这里插入图片描述

你可能感兴趣的:(小程序开发填坑记,小程序,python)