Go ના HTTP ક્લાયન્ટમાં SOCKS5 હોસ્ટનામનું નિરાકરણ
Go ના પ્રમાણભૂત HTTP ટ્રાન્સપોર્ટમાં socks5 અને socks5h અલગ DNS મોડ શા માટે પસંદ કરતા નથી તે સમજો.
Go 1.27.3 ના પ્રમાણભૂત HTTP ટ્રાન્સપોર્ટમાં socks5 અને socks5h ગંતવ્યનાં નામો એક જ રીતે સંભાળે છે. હોસ્ટનામથી આપેલું લક્ષ્ય પ્રોક્સીને હોસ્ટનામ તરીકે જ મોકલાય છે. આ સ્કીમ બદલવાથી curl ની જેમ સ્થાનિક અને દૂરસ્થ DNS વચ્ચે ફેરફાર થતો નથી.
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)
}
દસ્તાવેજીકરણ માટેનું સરનામું તમારા SOCKS5 એન્ડપોઇન્ટથી બદલો; વિકલ્પો SOCKS5 પ્રોક્સીની યાદીમાં જોઈ શકાય છે. ઉદાહરણ net/http નો પોતાનો ટ્રાન્સપોર્ટ વાપરે છે; બીજી Go લાઇબ્રેરી અલગ વર્તન અમલમાં મૂકી શકે છે.
તેમ છતાં બે નામો વચ્ચે ભેદ કરવો જરૂરી છે. આંકડામાં આપેલા પ્રોક્સી સરનામા માટે પ્રોક્સી હોસ્ટનું નામ શોધવાની જરૂર નથી; નામથી આપેલા પ્રોક્સીને SOCKS વિનંતી મોકલતાં પહેલાં સ્થાનિક રીતે શોધવો પડે છે. આંકડામાં આપેલા ગંતવ્યમાં નિરાકરણ કરવા માટે લક્ષ્યનામ હોતું નથી, તેથી તે હોસ્ટનામ કેવી રીતે સંભાળાય છે તે દર્શાવી શકતું નથી. SOCKS ની વાસ્તવિક પસંદગી તપાસવા માટે ગંતવ્યના ફીલ્ડમાં નામ છે કે સરનામું તે જુઓ.
પ્રમાણભૂત ટ્રાન્સપોર્ટ http, https, socks5 અને socks5h પ્રોક્સી સ્કીમને સપોર્ટ કરે છે. સામાન્ય SOCKS લેબલ એન્ડપોઇન્ટ પર SOCKS5 સપોર્ટ હોવાની ખાતરી આપતું નથી. આ ઉદાહરણ TCP પર HTTP મોકલે છે અને બીજા SOCKS આદેશો કે UDP રિલેનું પરીક્ષણ કરતું નથી.