2013-02-02 43 views
29

के लिए प्रॉक्सी सेट अप करना मैं HTTP क्लाइंट को सेटअप करने का प्रयास कर रहा हूं ताकि यह प्रॉक्सी का उपयोग कर सके, हालांकि मैं समझ नहीं पा रहा हूं कि इसे कैसे किया जाए। प्रलेखन में "प्रॉक्सी" के कई संदर्भ हैं लेकिन कोई भी कार्य प्रॉक्सी को परिभाषित करने की अनुमति नहीं देता है। मुझे इसकी आवश्यकता कुछ है:HTTP क्लाइंट

client := &http.Client{} 
client.SetProxy("someip:someport") // pseudo code 
resp, err := client.Get("http://example.com") // do request through proxy 

कोई विचार यह है कि इसे कैसे करें?

उत्तर

70

lukad सही है, तो आप, HTTP_PROXY वातावरण चर सेट कर सकते हैं यदि आप ऐसा करते हैं जाओ डिफ़ॉल्ट रूप से यह प्रयोग करेंगे।

बैश:

export HTTP_PROXY="http://proxyIp:proxyPort" 

जाओ:

os.Setenv("HTTP_PROXY", "http://proxyIp:proxyPort") 

आप अपना स्वयं का http.Client का निर्माण कर सकता है कि पर्यावरण के विन्यास की परवाह किए बिना एक प्रॉक्सी का उपयोग करना चाहिए:

proxyUrl, err := url.Parse("http://proxyIp:proxyPort") 
myClient := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyUrl)}} 

यह उपयोगी है अगर आप पर्यावरण की कॉन्फ़िगरेशन पर निर्भर नहीं हो सकते हैं, या इसे संशोधित नहीं करना चाहते हैं।

आप "net/http" पैकेज द्वारा उपयोग किए गए डिफ़ॉल्ट परिवहन को भी संशोधित कर सकते हैं। यह आपके पूरे कार्यक्रम को प्रभावित करेगा (डिफ़ॉल्ट HTTP क्लाइंट सहित)।

proxyUrl, err := url.Parse("http://proxyIp:proxyPort") 
http.DefaultTransport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)} 
+0

असल में, मुझे एक साथ कई अनुरोध भेजना होगा, प्रत्येक एक अलग प्रॉक्सी का उपयोग कर, इसलिए आपका दूसरा समाधान शायद मुझे चाहिए। हालांकि, यह काम नहीं कर रहा है, मुझे यह प्रॉक्सी सभी प्रॉक्सी के लिए मिल रही है: 'http://stackoverflow.com प्राप्त करें: http: प्रॉक्सी से कनेक्ट करने में त्रुटि 87.236.233.92:8080: GetServByName: अनुरोध किया गया नाम है मान्य है, लेकिन अनुरोधित प्रकार का कोई डेटा नहीं मिला। 'कोई विचार इसका क्या अर्थ है? –

+0

मुझे इस प्रश्न का मेरा जवाब मिला - http://stackoverflow.com/q/14669958/561309 –

+0

FYI: 'url' [net/url] में है (https://golang.org/pkg/net/url /) –

6

गो पर्यावरण परिवर्तनीय HTTP_PROXY में परिभाषित प्रॉक्सी का उपयोग करेगा यदि यह सेट है। अन्यथा यह कोई प्रॉक्सी का उपयोग नहीं करेगा।

आप इस तरह यह कर सकता है:

os.Setenv("HTTP_PROXY", "http://someip:someport") 
resp, err := http.Get("http://example.com") 
if err != nil { 
    panic(err) 
} 
+1

एफवाईआई - 'आतंक' के बाद 'वापसी '[अनावश्यक] (http://blog.golang.org/defer-panic-and-recover)। –

2

आप भी इस कोशिश कर सकते हो सकता है:

url_i := url.URL{} 
url_proxy, _ := url_i.Parse(proxy_addr) 

transport := http.Transport{}  
transport.Proxy = http.ProxyURL(url_proxy)// set proxy 
transport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} //set ssl 

client := &http.Client{} 
client.Transport = transport 
resp, err := client.Get("http://example.com") // do request through proxy 
0

एक वैकल्पिक तरीका के लिए, आप भी GoRequest जो एक विशेषता यह है कि आप किसी एक अनुरोध के लिए आसानी से प्रॉक्सी सेट कर सकते हैं का उपयोग कर सकते हैं।

request := gorequest.New() 
resp, body, errs:= request.Proxy("http://proxy:999").Get("http://example.com").End() 
resp2, body2, errs2 := request.Proxy("http://proxy2:999").Get("http://example2.com").End() 

या आप एक बार में पूरे के लिए सेट कर सकते हैं।

request := gorequest.New().Proxy("http://proxy:999") 
resp, body, errs:= request.Get("http://example.com").End() 
resp2, body2, errs2 := request.Get("http://example2.com").End() 
+0

gorequest मोजे प्रॉक्सी का समर्थन नहीं करता है –