feat: Read XHS_PROXY environment variable and apply to browser
- Read XHS_PROXY from environment in NewBrowser() - Pass proxy to headless_browser via WithProxy option - Add secure logging (mask credentials with ***) - Fully backward compatible (no proxy set = no change) Fixes XHS_PROXY not being applied to Chrome browser, which caused all requests to bypass the proxy and get blocked.
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
package browser
|
package browser
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/xpzouying/headless_browser"
|
"github.com/xpzouying/headless_browser"
|
||||||
"github.com/xpzouying/xiaohongshu-mcp/cookies"
|
"github.com/xpzouying/xiaohongshu-mcp/cookies"
|
||||||
@@ -18,6 +21,20 @@ func WithBinPath(binPath string) Option {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// maskProxyCredentials masks username and password in proxy URL for safe logging.
|
||||||
|
func maskProxyCredentials(proxyURL string) string {
|
||||||
|
u, err := url.Parse(proxyURL)
|
||||||
|
if err != nil || u.User == nil {
|
||||||
|
return proxyURL
|
||||||
|
}
|
||||||
|
if _, hasPassword := u.User.Password(); hasPassword {
|
||||||
|
u.User = url.UserPassword("***", "***")
|
||||||
|
} else {
|
||||||
|
u.User = url.User("***")
|
||||||
|
}
|
||||||
|
return u.String()
|
||||||
|
}
|
||||||
|
|
||||||
func NewBrowser(headless bool, options ...Option) *headless_browser.Browser {
|
func NewBrowser(headless bool, options ...Option) *headless_browser.Browser {
|
||||||
cfg := &browserConfig{}
|
cfg := &browserConfig{}
|
||||||
for _, opt := range options {
|
for _, opt := range options {
|
||||||
@@ -31,6 +48,12 @@ func NewBrowser(headless bool, options ...Option) *headless_browser.Browser {
|
|||||||
opts = append(opts, headless_browser.WithChromeBinPath(cfg.binPath))
|
opts = append(opts, headless_browser.WithChromeBinPath(cfg.binPath))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Read proxy from environment variable
|
||||||
|
if proxy := os.Getenv("XHS_PROXY"); proxy != "" {
|
||||||
|
opts = append(opts, headless_browser.WithProxy(proxy))
|
||||||
|
logrus.Infof("Using proxy: %s", maskProxyCredentials(proxy))
|
||||||
|
}
|
||||||
|
|
||||||
// 加载 cookies
|
// 加载 cookies
|
||||||
cookiePath := cookies.GetCookiesFilePath()
|
cookiePath := cookies.GetCookiesFilePath()
|
||||||
cookieLoader := cookies.NewLoadCookie(cookiePath)
|
cookieLoader := cookies.NewLoadCookie(cookiePath)
|
||||||
|
|||||||
Reference in New Issue
Block a user