Zgjidhja e emrave SOCKS5 në klientin HTTP të Go
Pse socks5 dhe socks5h nuk zgjedhin mënyra DNS të ndryshme në transportin standard HTTP të Go.
Në transportin standard HTTP të Go 1.27.3, socks5 dhe socks5h i trajtojnë emrat e destinacionit njësoj. Një objektiv me emër hosti i dërgohet proxy-t si emër hosti. Ndryshimi i këtyre skemave nuk kalon mes DNS lokale dhe të largët si në curl.
package main
import (
"fmt"
"log"
"net/http"
"net/url"
"time"
)
func main() {
proxyURL, err := url.Parse("socks5://203.0.113.10:1080")
if err != nil {
log.Fatal(err)
}
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxyURL)
defer transport.CloseIdleConnections()
client := &http.Client{
Transport: transport,
Timeout: 15 * time.Second,
}
response, err := client.Get("https://example.com/")
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
fmt.Println(response.StatusCode)
}
Zëvendësoni adresën e dokumentacionit me pikën tuaj fundore SOCKS5; kandidatët gjenden në listën e proxy-ve SOCKS5. Shembulli përdor transportin e vetë net/http; bibliotekë tjetër Go mund të sillet ndryshe.
Sërish duhen dalluar dy emra. Adresa numerike e proxy-t nuk kërkon kërkim të hostit proxy; proxy me emër duhet gjetur lokalisht para dërgimit të kërkesës SOCKS. Destinacioni numerik nuk ka emër për t’u zgjidhur dhe nuk demonstron trajtimin e emrave të hostit. Për zgjedhjen reale SOCKS, shikoni nëse fusha e destinacionit mban emër apo adresë.
Transporti standard mbështet skemat proxy http, https, socks5 dhe socks5h. Etiketa e përgjithshme SOCKS nuk provon mbështetje SOCKS5 në pikën fundore. Ky shembull dërgon HTTP mbi TCP dhe nuk teston komanda të tjera SOCKS ose transmetim UDP.