netflix.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package cmd
  2. import (
  3. "fmt"
  4. "gbase/glog"
  5. "log"
  6. "net/http"
  7. "net/http/cookiejar"
  8. "net/url"
  9. "strings"
  10. "time"
  11. )
  12. // CheckAvailableCountry 判断当前区域能否播放指定的netflix url
  13. func CheckAvailableCountry(cookies []*http.Cookie, netflixUrl, ProxyOnOff, proxyUrl string) (bool, error) {
  14. var err error
  15. transport := &http.Transport{}
  16. //是否使用代码的开关
  17. if ProxyOnOff == "on" {
  18. //根据参数判断是否需要设置proxy
  19. proxy, err := url.Parse(proxyUrl)
  20. if err != nil {
  21. log.Printf("proxy url parse error : %v \n", err)
  22. return false, err
  23. }
  24. transport.Proxy = http.ProxyURL(proxy)
  25. }
  26. //new个cookiejar罐子
  27. jar, err := cookiejar.New(nil)
  28. if err != nil {
  29. log.Printf("cookiejar New error : %v\n", err)
  30. return false, err
  31. }
  32. //原生的url,orz
  33. parseUrl, err := url.Parse(netflixUrl)
  34. if err != nil {
  35. log.Printf("netflixUrl Parse error : %v\n", err)
  36. }
  37. //fmt.Printf("parseUrl===>%v\n", parseUrl)
  38. //把传入的cookies装入罐
  39. jar.SetCookies(parseUrl, cookies)
  40. //初始化请求
  41. client := &http.Client{Jar: jar, Transport: transport, Timeout: 15 * time.Second}
  42. req, _ := http.NewRequest("GET", netflixUrl, nil)
  43. //请求加入头部
  44. req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36")
  45. // todo 检测跳转
  46. //client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
  47. // println(len(via))
  48. // return http.ErrUseLastResponse
  49. //}
  50. //发出请求
  51. resp, err := client.Do(req)
  52. defer func() {
  53. if err1 := recover(); err1 != nil {
  54. glog.XWarning(fmt.Sprintf("connect to the netflix faild %v\n", err1))
  55. err = fmt.Errorf("connect to the netflix faild %v\n", err1)
  56. }
  57. }()
  58. if err != nil {
  59. glog.XWarning(fmt.Sprintf("client.Do error : %v\n", err))
  60. return false, err
  61. }
  62. //根据response的url是否包含某些字符串,判断是否跳转
  63. if strings.Contains(resp.Request.URL.RequestURI(), "/watch/0") == true {
  64. return false, nil
  65. }
  66. defer resp.Body.Close()
  67. return true, nil
  68. }