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