解决小程序真机调试时报错request:fail -102:net::ERR_CONNECTION_REFUSED
创作背景
- 本菜鸡最近想开发个
微信小程序
,说不定能参加个什么比赛,拿个奖之类的(虽然不太可能) - 但很不巧,因为从未开发过微信小程序,所以各种 bug 蜂拥而至,妄图将我击退
- 可我不甘示弱,顽强的坚持到了现在
- 写下这篇文章以帮助自己及各位解决问题
问题再现
- 本菜鸡使用的是
python
的django
框架作为后台服务端 - 首先,我想让用户使用我的小程序时进行登录操作(像绝大多数的小程序一样)
- 所以我要
获得用户登录的 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);
}
})
- 后台空空如也,什么请求都没有接收到
解决思路
- 按照官方文档所述
解决方案
- 因为是
POST
请求,所以header
中的content-type
改为application/x-www-form-urlencoded
- 本地编译后,后台成功接收到
POST
请求 - 注:后台可能报错
Forbidden (CSRF cookie not set.)
- 解决方案:把
settings.py
中的这一行注释掉
- 解决方案:把
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);
}
})
解决思路
- 按照官方文档的描述(如图)
wx.request
所发起的请求都是https
,发送http
请求是不支持的,如果要支持的话,需要勾选如下图所示的选项
- 请求的
IP
不可以是localhost
,只能是127.0.0.1
(电脑测试的时候可以用这个,但真机调试必须用局域网 IP)或本机所属的局域网IP
- 这里的局域网
IP
指的是要真机调试的手机和电脑在同一个局域网中
,这时候IP
可以使用电脑的IP
- 查看电脑
IP
(以Windows
操作系统为例)- 在
windows
操作系统中使用 win+R 快捷键打开运行 - 输入
cmd
打开命令行 - 输入命令
ipconfig
即可查询得到本机的IP
- 或者在工具栏找到网络,
右键
打开“网络和 Internet 设置”
- 点击
更改连接属性
- 往下翻,
IPV4 地址
即为所求
- 在
- 以我的为例,我要请求的
url
应该改为http://172.22.202.74:9999/user/login
- 这里的局域网
- 同时,django 后台也要设置为
外部网络可以访问
,设置方法如下setting.py
中设置ALLOWED_HOSTS = ['*']
- 启动 django 项目时使用命令
python manage.py 0.0.0.0:【端口号】
- 设置为
0.0.0.0
即为任意IP均可访问
结果展示
- 成功解决 bug !!!
结尾
以上就是我要分享的内容,因为学识尚浅,会有不足,还请各位大佬指正。
有什么问题也可在评论区留言。