gpt4 book ai didi

http - 检查来自应用程序的 Internet 连接

转载 作者:IT王子 更新时间:2023-10-29 02:26:13 24 4
gpt4 key购买 nike

在我继续之前,我需要检查用户是否连接到互联网。

我正在使用 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 Bad gateway”

有人可以帮助如何继续和区分这两种情况吗?我只想显示简单的消息,而不是从服务器收到的全部错误消息。

最佳答案

检查已建立的 Internet 连接并不像 Ivan de la Beldad 建议的那样向任意 URL 发出单个 HTTP 请求那么简单。这可能会因多种原因而失败,但没有一个会必然阻止您对连接执行您实际打算执行的操作。举几个例子:

  • clients3.google.com 可能会被本地网络(防火墙、公司或学校代理)或任何途中网络(想想中国的防火墙)故意阻止
  • 由于网络中断,某些客户端可能无法访问 clients3.google.com
  • clients3.google.com 本身可能出于任何原因(可能是无意的)阻止客户端
  • clients3.google.com 可能出现故障
  • 端口 80 和 443 可能工作正常,但所有其他端口都被糟糕的酒店/咖啡店 wifi 阻止
  • 糟糕的酒店/咖啡店 wifi 向客户提供伪造的 TLS 证书,因此 HTTPS 请求在许多情况下会失败

因此,与其依赖单个任意 HTTP 请求,不如向您实际想要使用的任何服务发送某种活跃度探测。

如果您的应用想要与 API 通信,请查看是否有可以调用的运行状况或状态端点。如果没有,请寻找某种廉价的空操作。并且尽量不要告诉用户简单地“检查他们的 Internet 连接”。至少尝试解释为什么您的应用得出结论认为可能存在问题“我们现在无法连接到 Twitter。如果您已连接到 Internet,请在几分钟后重试”很多 .

如果您真的只想检查 Internet 本身是否可用,我建议您对 Internet 上的几个 DNS 服务器进行 DNS 查询。 DNS 不太可能被本地策略阻止,并且比 HTTP 请求便宜。明智地选择您的 DNS 查询并为 NXDOMAIN 响应做好准备。

关于http - 检查来自应用程序的 Internet 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50056144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com