proxy.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package base
  2. import (
  3. subSupplier "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier"
  4. "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/shooter"
  5. "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/subhd"
  6. "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/xunlei"
  7. "github.com/allanpk716/ChineseSubFinder/internal/types/backend"
  8. "github.com/gin-gonic/gin"
  9. "net/http"
  10. )
  11. func (cb *ControllerBase) CheckProxyHandler(c *gin.Context) {
  12. var err error
  13. defer func() {
  14. // 统一的异常处理
  15. cb.ErrorProcess(c, "CheckProxyHandler", err)
  16. }()
  17. checkProxy := backend.ReqCheckProxy{}
  18. err = c.ShouldBindJSON(&checkProxy)
  19. if err != nil {
  20. return
  21. }
  22. // 先尝试关闭之前的本地 http 代理
  23. err = cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
  24. if err != nil {
  25. return
  26. }
  27. // 备份一份
  28. bkProxySettings := cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.CopyOne()
  29. // 赋值 Web 传递过来的需要测试的代理参数
  30. cb.fileDownloader.Settings.AdvancedSettings.ProxySettings = &checkProxy.ProxySettings
  31. cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.UseProxy = true
  32. // 使用提交过来的这个代理地址,测试多个字幕网站的可用性
  33. subSupplierHub := subSupplier.NewSubSupplierHub(
  34. // 这里无需传递下载字幕的缓存实例
  35. //zimuku.NewSupplier(cb.fileDownloader),
  36. xunlei.NewSupplier(cb.fileDownloader),
  37. shooter.NewSupplier(cb.fileDownloader),
  38. subhd.NewSupplier(cb.fileDownloader),
  39. )
  40. outStatus := subSupplierHub.CheckSubSiteStatus()
  41. defer func() {
  42. // 还原
  43. cb.fileDownloader.Settings.AdvancedSettings.ProxySettings = bkProxySettings
  44. }()
  45. c.JSON(http.StatusOK, outStatus)
  46. }