feat: 添加支持代理的HTTP客户端以优化RSS和OPML请求
This commit is contained in:
parent
527998db49
commit
3811049f30
@ -6,15 +6,59 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"log"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"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 {
|
func CheckRssFeed(feedURL string) error {
|
||||||
//确认返回头
|
//确认返回头
|
||||||
resp, err := http.Head(feedURL)
|
client := createHTTPClient()
|
||||||
|
resp, err := client.Head(feedURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -58,7 +102,8 @@ func ParseFeed(feedURL string) (string, []RssItem, error) {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
//获取rss数据
|
//获取rss数据
|
||||||
resp, err := http.Get(feedURL)
|
client := createHTTPClient()
|
||||||
|
resp, err := client.Get(feedURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, err
|
return "", nil, err
|
||||||
}
|
}
|
||||||
@ -242,7 +287,8 @@ func parseTimeString(timeStr string) time.Time {
|
|||||||
// CheckOPMLFile 检查OPML文件是否有效
|
// CheckOPMLFile 检查OPML文件是否有效
|
||||||
func CheckOPMLFile(opmlURL string) error {
|
func CheckOPMLFile(opmlURL string) error {
|
||||||
//确认返回头
|
//确认返回头
|
||||||
resp, err := http.Head(opmlURL)
|
client := createHTTPClient()
|
||||||
|
resp, err := client.Head(opmlURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -275,7 +321,8 @@ func CheckOPMLFile(opmlURL string) error {
|
|||||||
// ParseOPML 解析OPML文件,返回RSS源列表
|
// ParseOPML 解析OPML文件,返回RSS源列表
|
||||||
func ParseOPML(opmlURL string) ([]OPMLFeedInfo, error) {
|
func ParseOPML(opmlURL string) ([]OPMLFeedInfo, error) {
|
||||||
//确认大小
|
//确认大小
|
||||||
resp, err := http.Head(opmlURL)
|
client := createHTTPClient()
|
||||||
|
resp, err := client.Head(opmlURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -287,7 +334,7 @@ func ParseOPML(opmlURL string) ([]OPMLFeedInfo, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//获取OPML数据
|
//获取OPML数据
|
||||||
resp, err = http.Get(opmlURL)
|
resp, err = client.Get(opmlURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user