帮助文档>代理IP>代码示例 > 隧道代理(动态请求)Go语言代码示例

隧道代理(动态请求)Go语言代码示例

发布时间:2023-03-27 21:38

普通模式

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "net/http"
  6. "net/url"
  7. "sync"
  8. "time"
  9. )
  10. func main() {
  11. authKey := "请改成您的Key"
  12. password := "请改成您的AuthPwd"
  13. proxyServer := "请改成您的隧道地址" //如:tunnel3.qg.net:19263
  14. targetURL := "https://ip.cn/api/index?ip=&type=0"
  15. rawURL := fmt.Sprintf("http://%s:%s@%s", authKey, password, proxyServer)
  16. proxyUrl, _ := url.Parse(rawURL)
  17. client := http.Client{
  18. Transport: &http.Transport{
  19. Proxy: http.ProxyURL(proxyUrl),
  20. },
  21. }
  22. req, _ := http.NewRequest("GET", targetURL, nil)
  23. rsp, err := client.Do(req)
  24. if err != nil {
  25. fmt.Printf("request failed: %s\n", err)
  26. return
  27. }
  28. defer rsp.Body.Close()
  29. body, err := ioutil.ReadAll(rsp.Body)
  30. if err != nil {
  31. fmt.Println(err)
  32. } else {
  33. fmt.Println(string(body))
  34. }
  35. }

打标记模式

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "net/http"
  6. "net/url"
  7. "sync"
  8. "time"
  9. )
  10. /** 返回内容
  11. 当前 IP:114.219.115.191 来自于:中国 江苏 苏州 电信
  12. 当前 IP:114.219.115.191 来自于:中国 江苏 苏州 电信
  13. 当前 IP:114.219.115.191 来自于:中国 江苏 苏州 电信
  14. 当前 IP:114.219.115.191 来自于:中国 江苏 苏州 电信
  15. 当前 IP:114.219.115.191 来自于:中国 江苏 苏州 电信
  16. 当前 IP:114.219.115.191 来自于:中国 江苏 苏州 电信
  17. 当前 IP:114.219.115.191 来自于:中国 江苏 苏州 电信
  18. 当前 IP:114.219.115.191 来自于:中国 江苏 苏州 电信
  19. 当前 IP:114.219.115.191 来自于:中国 江苏 苏州 电信
  20. 当前 IP:114.219.115.191 来自于:中国 江苏 苏州 电信
  21. 当前 IP:14.118.211.116 来自于:中国 广东 江门 电信
  22. */
  23. func main() {
  24. authKey := "请改成您的Key"
  25. password := "请改成您的AuthPwd"
  26. proxyServer := "请改成您的隧道的地址" //如:tunnel3.qg.net:19263
  27. targetURL := "https://ip.cn/api/index?ip=&type=0"
  28. rawURL := fmt.Sprintf("http://%s:%s@%s", authKey, password, proxyServer)
  29. proxyUrl, _ := url.Parse(rawURL)
  30. client := http.Client{
  31. Transport: &http.Transport{
  32. ProxyConnectHeader: http.Header{
  33. "Proxy-TunnelID": []string{"channel-1"}, // 在CONNECT连接中新增Proxy-TunnelID打标记
  34. "Proxy-TTL": []string{"10"}, // Proxy-TTL指定该标记IP的存活时间
  35. },
  36. Proxy: http.ProxyURL(proxyUrl),
  37. },
  38. }
  39. // 因为标记的存活时间是10s,所以循环11次中有10次的IP是一样的。
  40. // 第11次因为标记的IP到期了,系统会自动替换IP
  41. wg := sync.WaitGroup{}
  42. wg.Add(11)
  43. for i := 0; i < 11; i++ {
  44. go func() {
  45. defer wg.Done()
  46. req, _ := http.NewRequest("GET", targetURL, nil)
  47. rsp, err := client.Do(req)
  48. if err != nil {
  49. fmt.Printf("request failed: %s\n", err)
  50. return
  51. }
  52. defer rsp.Body.Close()
  53. body, err := ioutil.ReadAll(rsp.Body)
  54. if err != nil {
  55. fmt.Println(err)
  56. } else {
  57. fmt.Println(string(body))
  58. }
  59. }()
  60. time.Sleep(time.Second)
  61. }
  62. wg.Wait()
  63. }
本文导读

客户热线: