feat: 添加支持代理的HTTP客户端以优化RSS和OPML请求
This commit is contained in:
parent
527998db49
commit
3811049f30
@ -6,15 +6,59 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.lxtend.com/lixiangwuxian/qqbot/config"
|
||||
"golang.org/x/net/proxy"
|
||||
)
|
||||
|
||||
// createHTTPClient 创建支持代理的HTTP客户端
|
||||
func createHTTPClient() *http.Client {
|
||||
client := &http.Client{
|
||||
Timeout: 30 * time.Second,
|
||||
}
|
||||
|
||||
// 检查是否配置了代理
|
||||
if config.ConfigManager.GetConfig().Management.ProxyAddr != "" {
|
||||
proxyURL, err := url.Parse(config.ConfigManager.GetConfig().Management.ProxyAddr)
|
||||
if err != nil {
|
||||
log.Printf("解析代理地址失败: %v\n", err)
|
||||
return client
|
||||
}
|
||||
|
||||
if proxyURL.Scheme == "socks5" {
|
||||
log.Printf("使用SOCKS5代理: %s\n", proxyURL.Host)
|
||||
dialer, err := proxy.SOCKS5("tcp", proxyURL.Host, nil, proxy.Direct)
|
||||
if err == nil {
|
||||
client.Transport = &http.Transport{
|
||||
Dial: func(network, addr string) (net.Conn, error) {
|
||||
return dialer.Dial(network, addr)
|
||||
},
|
||||
}
|
||||
} else {
|
||||
log.Printf("创建SOCKS5代理失败: %v\n", err)
|
||||
}
|
||||
} else {
|
||||
log.Printf("使用HTTP/HTTPS代理: %s\n", proxyURL.Host)
|
||||
client.Transport = &http.Transport{
|
||||
Proxy: http.ProxyURL(proxyURL),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return client
|
||||
}
|
||||
|
||||
func CheckRssFeed(feedURL string) error {
|
||||
//确认返回头
|
||||
resp, err := http.Head(feedURL)
|
||||
client := createHTTPClient()
|
||||
resp, err := client.Head(feedURL)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -58,7 +102,8 @@ func ParseFeed(feedURL string) (string, []RssItem, error) {
|
||||
// }
|
||||
|
||||
//获取rss数据
|
||||
resp, err := http.Get(feedURL)
|
||||
client := createHTTPClient()
|
||||
resp, err := client.Get(feedURL)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
@ -242,7 +287,8 @@ func parseTimeString(timeStr string) time.Time {
|
||||
// CheckOPMLFile 检查OPML文件是否有效
|
||||
func CheckOPMLFile(opmlURL string) error {
|
||||
//确认返回头
|
||||
resp, err := http.Head(opmlURL)
|
||||
client := createHTTPClient()
|
||||
resp, err := client.Head(opmlURL)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -275,7 +321,8 @@ func CheckOPMLFile(opmlURL string) error {
|
||||
// ParseOPML 解析OPML文件,返回RSS源列表
|
||||
func ParseOPML(opmlURL string) ([]OPMLFeedInfo, error) {
|
||||
//确认大小
|
||||
resp, err := http.Head(opmlURL)
|
||||
client := createHTTPClient()
|
||||
resp, err := client.Head(opmlURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -287,7 +334,7 @@ func ParseOPML(opmlURL string) ([]OPMLFeedInfo, error) {
|
||||
}
|
||||
|
||||
//获取OPML数据
|
||||
resp, err = http.Get(opmlURL)
|
||||
resp, err = client.Get(opmlURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user