2012-11-08 18 views
6

ऐपस्पॉट पर तैनात किए जाने पर मेरा urlfetch क्लाइंट ठीक काम करता है। लेकिन प्रॉक्सी के माध्यम से स्थानीय परीक्षण (dev_appserver.py) समस्या है। मुझे urlfetch के लिए प्रॉक्सी सेट करने का कोई तरीका नहीं मिल रहा है। ट्रांसपोर्ट।प्रॉक्सी के माध्यम से स्थानीय परीक्षण gae golang urlfetch कैसे परीक्षण करें?

आप स्थानीय रूप से प्रॉक्सी के पीछे urlfetch का परीक्षण कैसे करते हैं?

उत्तर

0

यह सिर्फ एक अनुमान है, लेकिन आप setting the proxy variables

का प्रयास किया एक यूनिक्स या Windows वातावरण में, अजगर शुरू करने से पहले http_proxy, या एक URL कि प्रॉक्सी सर्वर की पहचान करता है करने के लिए ftp_proxy वातावरण चर सेट दुभाषिया। उदाहरण के लिए ('%' कमांड शीघ्र है):

% http_proxy = "http://www.someproxy.com:3128"

% निर्यात http_proxy

+0

मेरे पास उन्हें सेटअप है। यह लॉगिन के लिए ब्राउज़र आईडी का उपयोग कर एक गोलंग ऐप है। उत्तर – GQ77

0

अगर आप कर रहे हैं डिफ़ॉल्ट प्रॉक्सी का उपयोग करके परिवहन को

var DefaultTransport RoundTripper = &Transport{Proxy: ProxyFromEnvironment} 

चलने के दौरान पर्यावरण चर सेट करने से समस्या को हल करना चाहिए।

भी इस अन्य प्रश्न देखें: How do I configure Go to use a proxy?

0

urlfetch पैकेज ही प्रॉक्सी सेटिंग का सम्मान नहीं करता है, यहां तक ​​कि विकास में, अपने आप में लाने, क्योंकि यह वास्तव में यूआरएल नहीं कर रहा है: यह (संभवतः विकास) के लिए अनुरोध भेजता ऐप सर्वर और इसे लाने के लिए पूछता है। मैं dev_appserver.py काम का स्रोत नहीं है, लेकिन यह मानक प्रॉक्सी चर का सम्मान करना चाहिए:

export http_proxy='http://user:[email protected]:3210/' 

यदि आप करते हैं कि इससे पहले कि आप dev_appserver.py पहले, संभवतः यह सिर्फ काम करेंगे।

यदि उपरोक्त काम नहीं करता है, तो आप चाहिए file an issue और फिर निम्न तरीके का उपयोग:

func client(ctx *appengine.Context) *http.Client { 
    if appengine.IsDevAppServer() { 
     return http.DefaultClient 
    } 
    return urlfetch.Client(ctx) 
} 

यह उत्पादन appserver पर UrlFetch एपीआई का उपयोग लेकिन अन्यथा मानक net/http ग्राहक का उपयोग करेगा, जो does honor http_proxy वातावरण विविधता।

5

http.DefaultTransport और http.DefaultClient ऐप इंजन में उपलब्ध नहीं हैं। देखें GAE dev_appserver.py पर पेपैल OAuth का परीक्षण जब https://developers.google.com/appengine/docs/go/urlfetch/overview

यह त्रुटि संदेश मिल गया (उत्पादन में काम करता है जब संकलित)

const url string = "https://api.sandbox.paypal.com/v1/oauth2/token" 
const username string = "EOJ2S-Z6OoN_le_KS1d75wsZ6y0SFdVsY9183IvxFyZp" 
const password string = "EClusMEUk8e9ihI7ZdVLF5cZ6y0SFdVsY9183IvxFyZp" 

client := &http.Client{}   

req, _ := http.NewRequest("POST", url, strings.NewReader("grant_type=client_credentials")) 
req.SetBasicAuth(username, password) 
req.Header.Set("Accept", "application/json") 
req.Header.Set("Accept-Language", "en_US") 
req.Header.Set("Content-Type", "application/x-www-form-urlencoded") 

resp, err := client.Do(req) 

आप देख सकते हैं, जाओ App इंजन http.DefaultTransport टूट जाता है (GAE_SDK /goroot/src/pkg/appengine_internal/internal.go, लाइन 142, GAE 1.7.5)

type failingTransport struct{} 
func (failingTransport) RoundTrip(*http.Request) (*http.Response, error) { 
    return nil, errors.New("http.DefaultTransport and http.DefaultClient are not available in App Engine. " + 
     "See https://developers.google.com/appengine/docs/go/urlfetch/overview") 
} 

func init() { 
    // http.DefaultTransport doesn't work in production so break it 
    // explicitly so it fails the same way in both dev and prod 
    // (and with a useful error message) 
    http.DefaultTransport = failingTransport{} 
} 

यह जाओ App इंजन 1.7 के साथ मेरे लिए इसे हल।5

transport := http.Transport{} 

    client := &http.Client{ 
     Transport: &transport, 
    }  

    req, _ := http.NewRequest("POST", url, strings.NewReader("grant_type=client_credentials")) 
    req.SetBasicAuth(username, password) 
    req.Header.Set("Accept", "application/json") 
    req.Header.Set("Accept-Language", "en_US") 
    req.Header.Set("Content-Type", "application/x-www-form-urlencoded") 
+0

के लिए धन्यवाद यह मेरे लिए काम करता था, लेकिन मुझे कॉल "क्लाइंट.NewRequest" का उपयोग करना था "http.NewRequest" –

संबंधित मुद्दे