上一次虽然项目成功运行了但是涉及到网络请求服务就报错:
Post "https://api.siliconflow.cn/v1/chat/completions": dial tcp: lookup api.siliconflow.cn on [::1]:53: read udp [::1]:37232->[::1]:53: read: connection refused
dns解析不成功,但是我用Termux在手机里ping这个地址是完全可以的
然后又尝试使用nslookup命令也是完全可以的,问ai也是无果,查百度也是无果,可能这个玩法太野了,我在网上查到很多玩法都是先通gomobile打包成aar库染后通过java调用
终于我在这个文章底下发现了答案
https://www.cnblogs.com/fieldtianye/p/18004482
里面有很关键的一句话“涉及到网络访问走不通,原因是 AOSP android 系统没有 /etc 的网络解析文件。”
我又把这句话甩给了ai,ai这下告诉我一个解决方案,go可以自定义dns解析代码如下:
// 自定义 Resolver
resolver := &net.Resolver{
PreferGo: true,
Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
d := net.Dialer{
Timeout: 10 * time.Second,
}
return d.DialContext(ctx, "udp", "8.8.8.8:53") // 使用 Google 的 DNS 服务器
},
}
// 自定义 DialContext
dialContext := func(ctx context.Context, network, addr string) (net.Conn, error) {
host, port, err := net.SplitHostPort(addr)
if err != nil {
return nil, err
}
ips, err := resolver.LookupIPAddr(ctx, host)
if err != nil {
return nil, err
}
if len(ips) == 0 {
return nil, fmt.Errorf("no IP addresses found for host: %s", host)
}
return net.Dial(network, net.JoinHostPort(ips[0].String(), port))
}
client := &http.Client{}
client.Transport = &http.Transport{DialContext: dialContext}
resp, err := client.Get("http://www.baidu.com")
if err != nil {
fmt.Println(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(body))

成功!!!