feat: 强制使用IPv4发起订阅请求

This commit is contained in:
lixiangwuxian 2025-07-21 02:34:13 +08:00
parent 3811049f30
commit 06ba479094

View File

@ -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