隧道代理(動態(tài)請求)Go語言代碼示例
發(fā)布時間:2023-03-27 21:38
普通模式
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/url"
"sync"
"time"
)
func main() {
authKey := "請改成您的Key"
password := "請改成您的AuthPwd"
proxyServer := "請改成您的隧道地址" //如:tunnel3.qg.net:19263
targetURL := "
rawURL := fmt.Sprintf("http://%s:%s@%s", authKey, password, proxyServer)
proxyUrl, _ := url.Parse(rawURL)
client := http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(proxyUrl),
},
}
req, _ := http.NewRequest("GET", targetURL, nil)
rsp, err := client.Do(req)
if err != nil {
fmt.Printf("request failed: %s\n", err)
return
}
defer rsp.Body.Close()
body, err := ioutil.ReadAll(rsp.Body)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(string(body))
}
}
打標記模式
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/url"
"sync"
"time"
)
/** 返回內(nèi)容
當(dāng)前 IP:114.219.115.191 來自于:中國 江蘇 蘇州 電信
當(dāng)前 IP:114.219.115.191 來自于:中國 江蘇 蘇州 電信
當(dāng)前 IP:114.219.115.191 來自于:中國 江蘇 蘇州 電信
當(dāng)前 IP:114.219.115.191 來自于:中國 江蘇 蘇州 電信
當(dāng)前 IP:114.219.115.191 來自于:中國 江蘇 蘇州 電信
當(dāng)前 IP:114.219.115.191 來自于:中國 江蘇 蘇州 電信
當(dāng)前 IP:114.219.115.191 來自于:中國 江蘇 蘇州 電信
當(dāng)前 IP:114.219.115.191 來自于:中國 江蘇 蘇州 電信
當(dāng)前 IP:114.219.115.191 來自于:中國 江蘇 蘇州 電信
當(dāng)前 IP:114.219.115.191 來自于:中國 江蘇 蘇州 電信
當(dāng)前 IP:14.118.211.116 來自于:中國 廣東 江門 電信
*/
func main() {
authKey := "請改成您的Key"
password := "請改成您的AuthPwd"
proxyServer := "請改成您的隧道的地址" //如:tunnel3.qg.net:19263
targetURL := "
rawURL := fmt.Sprintf("http://%s:%s@%s", authKey, password, proxyServer)
proxyUrl, _ := url.Parse(rawURL)
client := http.Client{
Transport: &http.Transport{
ProxyConnectHeader: http.Header{
"Proxy-TunnelID": []string{"channel-1"}, // 在CONNECT連接中新增Proxy-TunnelID打標記
"Proxy-TTL": []string{"10"}, // Proxy-TTL指定該標記IP的存活時間
},
Proxy: http.ProxyURL(proxyUrl),
},
}
// 因為標記的存活時間是10s,所以循環(huán)11次中有10次的IP是一樣的。
// 第11次因為標記的IP到期了,系統(tǒng)會自動替換IP
wg := sync.WaitGroup{}
wg.Add(11)
for i := 0; i < 11; i++ {
go func() {
defer wg.Done()
req, _ := http.NewRequest("GET", targetURL, nil)
rsp, err := client.Do(req)
if err != nil {
fmt.Printf("request failed: %s\n", err)
return
}
defer rsp.Body.Close()
body, err := ioutil.ReadAll(rsp.Body)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(string(body))
}
}()
time.Sleep(time.Second)
}
wg.Wait()
}