feat: 强制使用IPv4发起订阅请求
This commit is contained in:
parent
3811049f30
commit
06ba479094
@ -1,6 +1,7 @@
|
||||
package rss
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/md5"
|
||||
"encoding/xml"
|
||||
"errors"
|
||||
@ -24,11 +25,28 @@ func createHTTPClient() *http.Client {
|
||||
Timeout: 30 * time.Second,
|
||||
}
|
||||
|
||||
// 创建强制使用IPv4的DialContext
|
||||
dialContext := func(ctx context.Context, network, addr string) (net.Conn, error) {
|
||||
// 强制使用IPv4
|
||||
if network == "tcp" {
|
||||
network = "tcp4"
|
||||
}
|
||||
dialer := &net.Dialer{
|
||||
Timeout: 30 * time.Second,
|
||||
KeepAlive: 30 * time.Second,
|
||||
}
|
||||
return dialer.DialContext(ctx, network, addr)
|
||||
}
|
||||
|
||||
// 检查是否配置了代理
|
||||
if config.ConfigManager.GetConfig().Management.ProxyAddr != "" {
|
||||
proxyURL, err := url.Parse(config.ConfigManager.GetConfig().Management.ProxyAddr)
|
||||
if err != nil {
|
||||
log.Printf("解析代理地址失败: %v\n", err)
|
||||
// 即使代理配置失败,也要使用IPv4
|
||||
client.Transport = &http.Transport{
|
||||
DialContext: dialContext,
|
||||
}
|
||||
return client
|
||||
}
|
||||
|
||||
@ -38,18 +56,32 @@ func createHTTPClient() *http.Client {
|
||||
if err == nil {
|
||||
client.Transport = &http.Transport{
|
||||
Dial: func(network, addr string) (net.Conn, error) {
|
||||
// 强制使用IPv4
|
||||
if network == "tcp" {
|
||||
network = "tcp4"
|
||||
}
|
||||
return dialer.Dial(network, addr)
|
||||
},
|
||||
}
|
||||
} else {
|
||||
log.Printf("创建SOCKS5代理失败: %v\n", err)
|
||||
// 代理失败时使用IPv4直连
|
||||
client.Transport = &http.Transport{
|
||||
DialContext: dialContext,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.Printf("使用HTTP/HTTPS代理: %s\n", proxyURL.Host)
|
||||
client.Transport = &http.Transport{
|
||||
Proxy: http.ProxyURL(proxyURL),
|
||||
Proxy: http.ProxyURL(proxyURL),
|
||||
DialContext: dialContext,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 没有代理时使用IPv4直连
|
||||
client.Transport = &http.Transport{
|
||||
DialContext: dialContext,
|
||||
}
|
||||
}
|
||||
|
||||
return client
|
||||
|
Loading…
x
Reference in New Issue
Block a user