调试不方便?我直接把公众号网页线上环境搬到本地

2023-11-16

在开发微信公众号网页时,我们最关心的一个问题就是调试。

  • 怎么调试线上环境?
  • 调试是否足够方便?

本文分享一种能够极大提高效率的微信公众号网页开发调试技巧,可以实现在本地开发时直连线上生产环境。如果你还不清楚这种场景下的调试技巧,不妨花几分钟阅读本文。

微信生态内容管控

在了解调试技巧的基本原理之前,我们有必要先搞明白微信在内容管控上是怎么做的,知己知彼才能找到突破口。

微信小程序

在小程序方面,由于小程序本质上是微信这个超级应用下的子应用,上线发布都是要经过微信审核的,部署时也是在部署在微信的服务器上,而不是开发者自行管理 Web 服务器,这就是说微信对小程序有绝对的管控权。

同时,在微信开发者工具中,微信也会校验很多身份信息,比如开发者工具的会话信息是否有效(通过微信扫码登录),小程序的 APP ID 是否正确,开发者是否拥有这个 APP ID 对应的小程序的开发权限,某些敏感的 API(比如支付)还会校验服务端域名、签名等信息,当然还有很多地方也会涉及各种校验,这里就不一一列举。

通过这些手段,微信基本上能识别出坐在电脑前的开发者身份,因此可以信任我们在微信开发者工具上调试小程序提供的各种 API。

微信公众号网页

那么微信公众号网页是否也如此呢?事实上不是,微信公众号网页本质上还是网页,这个网页是由开发者自行部署和维护的,管理权在开发者手里。但是对于微信来说,它作为一个平台,必然要对内容进行校验和监管。在网站方面,能用来校验所有权的方式不多,最直接有效的方式当然是校验域名。如果开发者需要使用微信生态提供的能力(比如授权,JSSDK 开放能力等),就必须先在微信公众平台后台中将域名配置好,并且按要求验证域名所有权。此外,不同类型、是否微信认证通过的公众号也有着不同的调用权限。

而在监管方面,由于公众号网页内容是由开发者自行设计实现,发版上线也是由开发者控制的,微信并不能做太多的干预(不方便加审核环节),这就导致微信在公众号网页内容监管上没法做太多事情,万一出现 hdd 等不良信息,除了加黑名单封杀也别无他法。监管能力和审核机制对平台来说是很重要的,否则哪天搞得不好就分分钟翻车,这也是微信选择力推小程序生态的一个重要因素。

公众号网页调试

在调用微信公众号 JSSDK API 或进行网页授权时,首先会校验的就是域名,域名如果与微信后台配置的不一致,就无法成功调用相关能力。

而我们在配置域名时,通常会把测试环境/生产环境的域名都配置上,方便调试。

但是本地开发时,我们的 devServer 配置一般是以 localhost 或者 127.0.0.1 作为主机名,再加上某个端口访问网页,但是这种形式是不被微信开发者工具认可的,因为它只接受已备案的并且通过微信后台校验的域名。

所以当涉及到授权或调试微信开放能力时,很多人的调试链路是:本地盲改 -> 发布到测试服务器上 -> 在测试环境测试功能 -> 如果存在bug,本地继续修改,重复以上步骤

这会浪费很多时间!那么有没有一种更方便的调试模式,让我们能够在本地开发时就能调用微信的各个开放能力,本地调试没问题后再发布到服务器上呢?答案是肯定的!

模拟线上环境调试

第一步是搞定微信开发者工具的调试流程。

虽然支付等特殊场景在开发者工具上不方便测试,但是搞通开发者工具的调试流程也足够应对大部分场景了。

我们知道,微信首先会检查域名,那我们就从域名上下功夫。

先说一个不知道算不算冷门的知识:webpack 的 devServer 可以指定 host 为一个域名,Vite Server 同样也可以。port 参数也可以指定为 80。

基于此,假设我们的线上域名是juejin.cn,我们可以先在本地开发时指定 host 为juejin.cn, port 为 80。

此时我们打开浏览器通过http://juejin.cn:80这个地址访问,80 端口是 http 的默认端口,所以带不带 80 其实都一样,此时我们的请求会根据 DNS 解析访问到线上服务器,由于代理服务器配置了 301 重定向,http 80 端口的请求会被重定向到 https 443 端口,

所以浏览器会再发起一次请求到https://juejin.cn,最终得到的响应还是来源于我们的线上环境。

有的读者可能就会问了,既然 devServer host 配置了线上域名,但最终的请求还是转到线上的机器去了,那这对我本地调试来说有什么意义?

这就要搞清楚 DNS 的解析流程是怎么回事了。我们知道,IP 对应的服务器才是真正提供服务的,域名只不过是一个名字,而 DNS 服务就是负责把域名解析到 IP 上的。

而 DNS 解析的第一道关口就是本机的 hosts 文件,hosts 文件中找不到的记录,才会往 DNS 服务器去找。

那我们只要把 hosts 文件给改了,让juejin.cn解析到我本地的 IP 不就行了吗?我们来试试。

hosts 文件在 Windows 操作系统中通常是位于C:\Windows\System32\drivers\etc目录下,我们修改一下这个文件,加入一条记录,接着需要用管理员权限保存。

127.0.0.1 juejin.cn 

这相当于把域名juejin.cn通过本地 hosts 文件解析到127.0.0.1,这样一来,访问juejin.cn等价于访问 127.0.0.1

接着使用http://juejin.cn:80进行访问,会发现打开的网页内容确实是由自己的本地服务提供的。

在微信开发者工具中也同样适用。

此时我们在微信开发者工具中调用网页授权或者JSSDK API是被微信认可的,这就相当于实现了在本地调试公众号网页线上环境的需求。

整个访问链路大概是这样的:

我们用的是 http 协议进行调试,注意在【公众号设置-功能设置】中,不要开启域名的强制https校验。

解决内核记住并强制访问 https 的问题

如果不小心输入了 https 进行访问,微信开发者工具的浏览器内核会强制后续都按 https 访问,这样一来,就没法用上述技巧调试了。

这时候即便点击 Clear Cache 也无法解决这个问题,

尝试在 Chrome 中使用chrome://net-internals/#hsts Delete domain security policies 也无法解决此问题。

重启也没用的。怎么办呢?

此时,我们可以找到C:\Users\YourName\AppData\Local\微信开发者工具目录,把其中的 User Data 目录给删除掉。再重新打开微信开发者工具时,就是一个全新的状态,也就可以继续用 http 调试了。

注意,删除 User Data 目录后,你之前导入的小程序项目都将消失,后续需要重新导入各个小程序。

当然,我们也可以在本地搭建起 https 环境用于调试,不过这就超出本文要讨论的范畴了,本文中不便展开叙述。

80端口占用问题

在 windows 中有遇到过80端口被占用的问题。

可以用netstat -aon | findstr :80检查一下,如果感觉有可疑的进程,可以考虑用taskkill /pid xxx -f杀掉。

也可以检查下注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP这一项,将 Start 设置为 0。

// 其他可能有帮助的检查命令
netsh http show servicestate 

真机线上环境调试

更高级的问题来了,有些 API(比如支付)在 PC 端微信开发者工具中也不能调试,为了提高开发效率,我们希望能够在真机中直连 PC 本地开发环境进行调试,功能调试正常后再发布到线上。而在真机上,微信也会校验我们的访问域名,那么真机怎么直连我们的本地开发环境进行调试,然后还能被微信认可呢?

答案是还是修改 hosts 文件,把真机的 hosts 文件改了,比如将juejin.cn解析到指定 IP,不过不是解析到127.0.0.1,而是解析到 PC 机的局域网 IP 上。

这要求真机和 PC 在同一个局域网内,否则后续请求是走不通的。

然而安卓修改 hosts 文件不是一件容易的事情,由于 Android 就是 Linux 基础上发展来的,而厂商都把修改 hosts 这种底层的权限都屏蔽了,所以要修改 hosts 文件,最直接的办法就是先让手机取得 Root 权限,但是 Root 权限一旦打开,风险也很高,那么有没有办法不 Root 也能修改 hosts 文件呢?

有一种方法是通过 VPN 解决,我们在安卓端安装一个Virtual Hosts,Virtual Hosts 支持通过 hosts.txt 文件解析,这就可以将线上域名解析到 192.168.x.x 这样的 PC 端 IP 上。

如果不生效,可能是 DNS 缓存问题,这个时候可能要重启一下安卓机,或者等 DNS 缓存的时间过去才能生效。

当然,不做开发调试时,还是要把 hosts 文件和相关配置改回来,免得影响正常使用。

结语

这种修改 hosts 文件的行为,其实是 DNS 欺骗的一种表现形式。学会 DNS 欺骗后,很多相似场景的需求都可以迎刃而解。欢迎留言讨论。

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调试不方便?我直接把公众号网页线上环境搬到本地 的相关文章

  • NotWritablePropertyException

    ssm项目又来一个低级错误 粗心粗心 异常信息 Caused by org springframework beans NotWritablePropertyException Invalid property mapperLocation
  • 【机器学习】人工神经网络(ANN)浅讲

    神经网络是一门重要的机器学习技术 它是目前最为火热的研究方向 深度学习的基础 学习神经网络不仅可以让你掌握一门强大的机器学习方法 同时也可以更好地帮助你理解深度学习技术 本文以一种简单的 循序的方式讲解神经网络 适合对神经网络了解不多的同学
  • Layui富文本编辑器图片上传接口(.NET C#)

    本来想偷懒找个现成的接口 搜了一下发现没有现成的 那我在这写一个并分享给大家吧 demo打包好了在我的csdn下载中心 http download csdn net download xianglikai1 9970000 下面也有代码和结
  • 设置QListWidget背景色为透明

    只要一条指令就可以实现 ui gt listWidget gt setStyleSheet background color transparent 其中background color设置参考CSS背景设置如下 以下摘自 http www
  • PD通信协议芯片选型分析对比

    目录 一 PD SINK协议芯片对比图 二 总结 关键词 pd协议芯片 协议芯片 芯片通信协议 通信协议 前言 在如今快节奏生活不断蔓延的背景下 人们对各种事情的处理也渐渐地开始要求在保证质量的情况下 不断加快 手机快充就是一个典型的例子
  • iOS开发之Xcode 6更新默认不支持armv7s架构

    最近一次的Xcode 6更新默认不再支持arm7s架构 究竟是要废除不用呢还是仅仅只是一个疏忽 目前的Xcode 6配置里定义 ARCHS STANDARD 为armv7 arm64 当然这个定义前提是它会一再要求你删除掉你原本设定的构建架

随机推荐

  • 将对象的null字段赋值为默认值

    import java lang reflect Field import java math BigDecimal import java util ArrayList import java util Date import org a
  • 【Redis详细教程】Linux下如何安装Redis

    第一步 下载 redis wget https download redis io releases redis 6 2 6 tar gz 第二步 解压 redis 6 2 6 tar gz 并将其重新命名为 redis tar xvf r
  • 前端实现:点击硬币实现硬币翻转动画,且动画停止时正反面随机

    html div class pic box div class boxes div class box 硬币正面图片 img alt 硬币反面图片 img div div div
  • 基于Spring Boot + Vue的智慧宿舍管理系统设计与实现

    Java全能学习 面试指南 https javaxiaobear cn 摘要 随着智能化技术的快速发展 智慧宿舍管理系统在大学校园中得到了广泛的应用 本论文旨在设计并实现一种基于前后端分离的智慧宿舍管理系统 通过将前端和后端进行分离 提高系
  • windows安装minio

    官网下载地址 https min io download windows 进入minio exe的目录执行启动命令 minio exe server C Users wwwch Desktop minio data C Users wwwc
  • 基于循环神经网络的图像特定文本抽取方法

    作者的模型整体框架包含两部分 分别为 OCR 部分 采用人家的模型 输出文本 特定文本抽取部分 作者的工作 1 引言 早期图像特定文本抽取主要是通过 OCR 中的版面分析 Layout analysis 来实现 即首先利用 版面分析 的方法
  • Python+django的ORM查询

    在使用python后端开发时 很多人都会遇到使用原生sql还是django自带的orm进行数据库的操作好呢 纠结的原因有很多 其中一点就是对orm不熟悉 导致某些查询可能不知道如何实现 于是采用了原生sql 今天 就让我们来总结一下常用的o
  • Windows10 配置 Swin-Transformer 踩坑记

    机器配置 rtx 3090 CUDA 11 1 Python 3 8 pytorch 1 9 0 步骤 1 下载Swin Transformer git clone recursive https github com SwinTransf
  • centos7执行命令iptables 出现Unit iptables.service failed to load: No such file or directory.

    解决方式 安装iptables services yum install iptables services 开机启动 systemctl enable iptables systemctl stop iptables systemctl
  • 更新powershell 7.3.2

    最近在使用VsCode时打开中断会时常提示你powershell已经更新前往地址下载 但是跳转到的页面描述有时候看不太清晰 于是去b站结合网络文档还是成功更新了 有兴趣的朋友可以通过这个链接查看一下在线文档 gt powershell的在线
  • ASPxTextBox中数据有效性设置

    1 选中ASPxTextBox控件 2 设置属性 Validationsettings中errordisplaymode requiredfield中errortext和isrequired 3 结果 4 总图
  • 100天精通Python(可视化篇)——第78天:matplotlib绘图模块基础入门大全

    文章目录 专栏导读 一 课程介绍 为什么要学习matplotlib 什么是matplotlib 二 绘制折线图 基础绘图 设置图片大小和分辨率 调整X或者Y轴上的刻度 设置中文显示 坐标轴添加描述信息 绘制网格 双折线图 添加图例 自定义绘
  • unittest使用ddt数据驱动的小demo

    一 ddt简介 1 ddt是 data driven testing的缩写 中文含义是数据驱动测试 2 ddt通常与unittest组合使用 常用的包有ddt data unpack file data 我这边使用前两种 二 ddt安装 1
  • word怎么改一张纸的方向_word单页怎么改变纸张方向

    word改变单页纸张方向的方法 1 将插入点移动到需要修改的单页的开头 2 在 布局 菜单中 分隔符 下选择 下一页 3 点击 纸张方向 选择 横向 4 将插入点移动到下一页的开头 再点击 分隔符 的 下一页 再点击 纵向 即可 本教程操作
  • el-tree和el-table相关使用

    文章目录 el tree实现模糊查询 el tree实现node节点增删改 el tree 实现节点懒加载 el tree获取所有选中的当前节点 el tree获取当前节点及其选中父节点 el table 获取多选行的所有节点 el tab
  • 产消合一。有感于华人新首富赵长鹏投资福布斯的话

    DAO Web 3 0引领的新时代是 产消合一的经济 逐渐发展成为 融投研产消宣多种角色为一身 有感于赵长鹏希望投资福布斯 xxFi或xx To Earn含DeFi GameFi Play To Earn P2E SocialFi Read
  • ES搜索引擎入门+最佳实践(一)

    ES在搜索和数据分析中的应用越来越广泛 在之前项目中对ES的使用有些心得 最近有不少朋友和同事都问到了ES 刚好最近也有些时间 所以打算通过8 10篇文章介绍下ES 其实我也不知道最终会写下多少篇 一 概述 本篇文章计划给大家介绍什么ES
  • CVPR2022 |小红书首创多图交互建模挑战热门研究课题,大幅提升行人重识别性能

    在CVPR2022上 小红书多模态算法组提出一种新颖的用于行人重识别的网络Neighbor Transformer NFormer 区别于传统的行人重识别网络仅仅对单张图片进行建模 NFormer对通过transformer对多张输入图像进
  • PWN保护机制以及编译方法

    0x00 声明 以下内容 来自先知社区的作者逆向萌新原创 由于传播 利用此文所提供的信息而造成的任何直接或间接的后果和损失 均由使用者本人负责 长白山攻防实验室以及文章作者不承担任何责任 0x01前言 Ctf中的pwn题 在利用gcc编译的
  • 调试不方便?我直接把公众号网页线上环境搬到本地

    在开发微信公众号网页时 我们最关心的一个问题就是调试 怎么调试线上环境 调试是否足够方便 本文分享一种能够极大提高效率的微信公众号网页开发调试技巧 可以实现在本地开发时直连线上生产环境 如果你还不清楚这种场景下的调试技巧 不妨花几分钟阅读本