写点什么

【异常解决】UnknownHostException: api.weixin.qq.com 的解决方案

作者:No8g攻城狮
  • 2023-04-12
    河南
  • 本文字数:993 字

    阅读完需:约 3 分钟

一、问题描述

在使用微信服务过程中(调用 api.weixin.qq.com),经常会碰到如下这种问题:“java.net.UnknownHostException: api.weixin.qq.com: 未知的名称或服务”。如下图所示:



关键是这种问题不是必现,在 Windows 电脑上可能正常调用,但是部署到服务器(Linux 系统)上却出现了,问题很难排查。查了好多方案都没有解决。最后通过不断分析实验,得出本文解决方法。


二、解决方案


Linux 系统下的解决方案如下:


步骤 1:找到 resolv.conf 配置文件


一般情况下此文件都会在 /etc/ 目录下


配置上如下内容:


options timeout:1 attempts:1 rotate

#options single-request-reopen

nameserver 119.29.29.29

nameserver 114.114.114.114

nameserver 180.76.76.76

nameserver 223.5.5.5


Tips:nameserver:dns 服务器,分别采用了腾讯的、114 的、百度的、阿里的 dns 服务器,总有一个是可行的。


步骤 2:chattr + i /etc/resolv.conf


在有些 Linux 下,当网络重启后,/etc/resolv.conf 会恢复到原来的状态。本命令是让文件编程只读。如果今后需要修改,用 chattr -i /etc/resolv.conf


步骤 3:vi /etc/sysconfig/network-scripts/ifcfg-eth0


删掉 DNS1,DNS2 参数,都用 resolv.conf 中的配置


步骤 4:重新启动网络:service network restart


如果报错或者不生效,请找问题并重启网络

步骤 5:可以用 nslookup 查看哪个 DNS 生效


三、参数说明


options 后面跟的是各种参数,每个参数意义如下:

timeout:设置等待 dns 服务器返回的超时时间,单位秒。默认值 5。

attempts:向 DNS 服务器发起域名解析的请求次数。默认值 2。采用多个 dns 服务器轮询。

rotate:采用轮询方式访问 nameserver。

single-request-reopen:CentOS6/CentOS7 总是需要等待 AAAA(IPv6)的结果,即使关闭 IPv6 也没什么卵用。CentOS 6/CentOS 7 中的 DNS 解析器对于 ipv4 和 ipv6 都使用同一个 socket 接口,在同时发出 ipv4 和 ipv6 解析请求后,只会收到一个 ipv4 的解析响应,此时 socket 将一处于“等待”模式,等待 ipv6 的解析响应,故导致解析缓慢;添加 single-request-reopen 后就可以重新打开一个新的 socket 接收 ipv6 的解析响应,而不影响 ipv4 的解析响应。


四、补充说明


经验证关于 options single-request-reopen 配置在某些环境可以,但在某些环境下打开会导致错误如下:


java.net.UnknownHostException: www.xxxxx.com: 未知的名称或服务	at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
复制代码


该种情况下,关闭该选项即可。


本文完结!

发布于: 刚刚阅读数: 3
用户头像

No8g攻城狮

关注

熟了再告诉你 2022-12-03 加入

热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长

评论

发布
暂无评论
【异常解决】UnknownHostException: api.weixin.qq.com 的解决方案_小程序_No8g攻城狮_InfoQ写作社区