我需要检查用户是否已连接到互联网,然后才能继续。
我使用 HttpClient 访问端点,如下所示:
client := &http.Client{}
req, _ := http.NewRequest("GET", url, nil)
req.SetBasicAuth(username, password)
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
ui.Failed("Check your internet connection")
}
1)如果用户在这种情况下没有连接到互联网,我需要向用户显示清晰的消息,显示“请检查您的互联网连接”
2) 如果服务器没有响应,并收到 504 bad gateway,
显示“504 网关错误”
有人可以帮助如何继续和区分这两种情况,我只想显示简单的消息,而不是从服务器收到的整个错误消息。
检查已建立的 Internet 连接并不像 Ivan de la Beldad 所建议的那样像向任意 URL 发出单个 HTTP 请求那么简单。这可能会因多种原因而失败,但这些原因都不一定会阻止您执行您真正打算使用连接执行的操作。仅举几例:
- client3.google.com 可能会被本地网络(防火墙、公司或学校代理)或任何途中网络(例如中国的防火墙)故意阻止
- 由于网络中断,某些客户端可能无法访问clients3.google.com
- client3.google.com 本身可能会出于任何原因阻止客户端(可能是无意的)
- clients3.google.com 可能出现中断
- 端口 80 和 443 可能工作正常,但所有其他端口都被糟糕的酒店/咖啡店 wifi 阻止
- 糟糕的酒店/咖啡店 wifi 向客户端提供假的 TLS 证书,因此 HTTPS 请求在很多情况下都会失败
因此,与其依赖单个任意 HTTP 请求,不如向您实际想要使用的任何服务发送某种活性探测。
如果您的应用程序想要与 API 通信,请查看是否有可以调用的运行状况或状态端点。如果没有,请寻找某种廉价的无操作方法。并且尽量不要告诉用户简单地“检查他们的互联网连接”。尝试至少解释一下为什么您的应用程序得出结论,可能存在“我们现在无法连接到 Twitter。如果您已连接到互联网,请在几分钟后重试”的问题much better.
如果您确实只想检查互联网本身是否可用,我建议您进行 DNS 查询several互联网上的 DNS 服务器。 DNS 不太可能被本地策略阻止,并且比 HTTP 请求便宜。明智地选择您的 DNS 查询并为 NXDOMAIN 响应做好准备。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)