Go HTTP கிளையன்டுக்குத் தனி ப்ராக்ஸி அமைக்கவும்
Go-வின் இயல்புநிலை transport-ஐ நகலெடுத்து தேர்ந்தெடுத்த IP-க்கு ProxyURL அமைக்கவும். மற்ற கிளையன்டுகளின் ப்ராக்ஸி செயல்பாட்டை மாற்ற வேண்டாம்.
Go HTTP கிளையன்டின் transport ப்ராக்ஸியைத் தேர்ந்தெடுக்கிறது. இயல்புநிலை கிளையன்டைப் பயன்படுத்தும் மற்றவர்களின் தற்போதைய பாதை மாறாமல் இருக்க, தரநிலை transport-ஐ மாற்றுமுன் நகலெடுக்கவும்.
package main
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
"time"
)
func main() {
proxyURL, err := url.Parse("http://203.0.113.10:8080")
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)
if _, err := io.Copy(io.Discard, response.Body); err != nil {
log.Fatal(err)
}
}
முகவரி ஆவணத்திற்கான எடுத்துக்காட்டு மட்டுமே. HTTP ப்ராக்ஸி பட்டியலிலிருந்து தேர்ந்தெடுத்தது போன்ற உண்மையான HTTP ப்ராக்ஸி IP, போர்ட் ஆகியவற்றால் மாற்றவும். எடுத்துக்காட்டு Go-வின் தரநிலை நூலகத்தை மட்டுமே பயன்படுத்துகிறது; இந்த HTTP ப்ராக்ஸி கோரிக்கைக்கு SOCKS தொகுப்போ செயல்முறை முழுமைக்குமான சூழல் மாறியோ தேவையில்லை.
DefaultTransport-ஐ நேரடியாக மாற்றாதது ஏன்?
இயல்புநிலை transport பகிரப்படுகிறது. அதை மாற்றினால் உங்கள் ப்ராக்ஸியைப் பயன்படுத்தக் கேட்காத குறியீட்டின் செயல்பாடும் மாறலாம். கோரிக்கைகள் பயன்படுத்திக்கொண்டிருக்கும்போது மாற்றுவது தவிர்க்கக்கூடிய ஒரேநேரச் செயல்பாட்டுச் சிக்கல்களையும் உருவாக்கும். தனி transport பாதையை இந்தக் கிளையன்டின் அமைப்பின் பகுதியாக்குகிறது.
http.ProxyURL வழங்கிய URL-ஐ எப்போதும் தேர்ந்தெடுக்கும் தேர்வியைத் தருகிறது. இது ப்ராக்ஸி மாறிகள், விலக்கு விதிகள் ஆகியவற்றைக் கருத்தில் கொள்ளும் இயல்புநிலை சூழல் தேர்வியிலிருந்து வேறுபடுகிறது. HTTP பட்டியலில் ஒரு குறிப்பிட்ட பதிவைச் சோதிக்க வேண்டுமெனில், வெளிப்படையான தேர்வி இந்தத் தெளிவின்மையை நீக்குகிறது.
பதிலை மூடி கிளையன்டை மீண்டும் பயன்படுத்தவும்
எடுத்துக்காட்டு பதிலின் உடலை முழுவதும் படித்து மூடுகிறது. கடைசிவரை படிப்பது transport இணைப்பை முடிந்தபோது மீண்டும் பயன்படுத்த உதவுகிறது. ஒரே ப்ராக்ஸி வழியாகப் பல கோரிக்கைகள் செய்யும் நிரலில் ஒவ்வொரு முறையும் புதிய ஜோடி உருவாக்காமல் கிளையன்டையும் transport-ஐயும் வைத்திருக்கவும்.
கிளையன்டின் நேர வரம்பு சாக்கெட்டைத் திறப்பதோடு நிற்காது; பதிலின் உடலைப் படிப்பது உட்பட கோரிக்கையின் வாழ்க்கைச் சுழற்சியையும் கட்டுப்படுத்துகிறது. Get திரும்பிய பிறகும் வாசிப்புப் பிழைகளைக் கையாள வேண்டும். 403 போன்ற நிலை Go transport பிழை அல்ல; ஆகவே StatusCode-ஐ err-இலிருந்து தனியாகச் சரிபார்க்கவும்.