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 ପ୍ରକ୍ସିର IP ଓ ପୋର୍ଟରେ ବଦଳାନ୍ତୁ, ଯେପରି HTTP ପ୍ରକ୍ସି ତାଲିକାରୁ ବାଛିଥିବା ଏକ ବିକଳ୍ପ। ଉଦାହରଣ କେବଳ Go ର ମାନକ ଲାଇବ୍ରେରୀ ବ୍ୟବହାର କରେ; ଏହି HTTP ପ୍ରକ୍ସି ଅନୁରୋଧ ପାଇଁ SOCKS ପ୍ୟାକେଜ୍ କିମ୍ବା ସମଗ୍ର ପ୍ରକ୍ରିୟାର ପରିବେଶ ଚଳ ଦରକାର ନାହିଁ।
DefaultTransport କୁ ସିଧା କାହିଁକି ନ ବଦଳାଇବେ?
ଡିଫଲ୍ଟ transport ସମସ୍ତେ ମିଶି ବ୍ୟବହାର କରନ୍ତି। ବଦଳାଇଲେ ଆପଣଙ୍କ ପ୍ରକ୍ସି ମାଗି ନଥିବା କୋଡ୍ର ଆଚରଣ ମଧ୍ୟ ବଦଳିପାରେ। ଅନୁରୋଧ ତାହାକୁ ବ୍ୟବହାର କରୁଥିବା ବେଳେ ପରିବର୍ତ୍ତନ କଲେ ଏଡ଼ାଇ ପାରିବା ଭଳି ସମାନ୍ତରାଳ କାର୍ଯ୍ୟ ସମସ୍ୟା ହୁଏ। ଅଲଗା transport ମାର୍ଗକୁ ଏହି କ୍ଲାଏଣ୍ଟର ବିନ୍ୟାସର ଅଂଶ କରେ।
http.ProxyURL ସର୍ବଦା ଦିଆଯାଇଥିବା URL ବାଛୁଥିବା ଚୟନକର୍ତ୍ତା ଫେରାଏ। ଏହା ପ୍ରକ୍ସି ଚଳ ଓ ବାଇପାସ୍ ନିୟମ ବିଚାର କରୁଥିବା ଡିଫଲ୍ଟ ପରିବେଶ ଚୟନକର୍ତ୍ତାଠାରୁ ଅଲଗା। HTTP ତାଲିକାର ଗୋଟିଏ ନିର୍ଦ୍ଦିଷ୍ଟ ପ୍ରବିଷ୍ଟି ପରୀକ୍ଷା କରିବାକୁ ଚାହିଁଲେ ସ୍ପଷ୍ଟ ଚୟନକର୍ତ୍ତା ଏହି ଅସ୍ପଷ୍ଟତା ହଟାଏ।
ପ୍ରତିକ୍ରିୟା ବନ୍ଦ କରନ୍ତୁ ଓ କ୍ଲାଏଣ୍ଟ ପୁନଃ ବ୍ୟବହାର କରନ୍ତୁ
ଉଦାହରଣ ପ୍ରତିକ୍ରିୟାର ବଡି ସମ୍ପୂର୍ଣ୍ଣ ପଢ଼ି ବନ୍ଦ କରେ। ଶେଷ ପର୍ଯ୍ୟନ୍ତ ପଢ଼ିଲେ transport ସମ୍ଭବ ହେଲେ ସଂଯୋଗ ପୁନଃ ବ୍ୟବହାର କରିପାରେ। ଏକ ପ୍ରକ୍ସି ଦ୍ୱାରା ଅନେକ ଅନୁରୋଧ କରୁଥିବା ପ୍ରୋଗ୍ରାମରେ ପ୍ରତିଥର ନୂଆ ଯୋଡ଼ି ନ ତିଆରି କରି କ୍ଲାଏଣ୍ଟ ଓ transport ରଖନ୍ତୁ।
କ୍ଲାଏଣ୍ଟର ସମୟସୀମା କେବଳ ସକେଟ୍ ଖୋଲିବାକୁ ନୁହେଁ, ପ୍ରତିକ୍ରିୟା ବଡି ପଢ଼ିବା ସହିତ ଅନୁରୋଧର ଜୀବନଚକ୍ରକୁ ମଧ୍ୟ ସୀମିତ କରେ। Get ଫେରିବା ପରେ ମଧ୍ୟ ପଢ଼ିବା ତ୍ରୁଟି ସମ୍ଭାଳିବା ଦରକାର। 403 ଭଳି ସ୍ଥିତି Go transport ତ୍ରୁଟି ନୁହେଁ, ତେଣୁ StatusCode ଓ err ଅଲଗା ଯାଞ୍ଚ କରନ୍ତୁ।