私のurlfetchクライアントは、appspotにデプロイされたときに正常に動作します。しかし、プロキシ経由のローカルテスト(dev_appserver.py)には問題があります。 urlfetch.Transportのプロキシを設定する方法が見つかりません。プロキシ経由でglang urlfetchをローカルテストする方法は?
ローカルでプロキシの背後でurlfetchをテストするにはどうすればよいですか?
私のurlfetchクライアントは、appspotにデプロイされたときに正常に動作します。しかし、プロキシ経由のローカルテスト(dev_appserver.py)には問題があります。 urlfetch.Transportのプロキシを設定する方法が見つかりません。プロキシ経由でglang urlfetchをローカルテストする方法は?
ローカルでプロキシの背後でurlfetchをテストするにはどうすればよいですか?
これは単なる推測ですが、あなたは、Pythonを開始 前に、プロキシサーバーを識別するURLにhttp_proxyに、またはFTP_PROXY 環境変数を設定し、UNIXまたはWindows環境ではsetting the proxy variables
を試してみました通訳。例えば( '%' のコマンドプロンプト です):
% HTTP_PROXY = "http://www.someproxy.com:3128"
%輸出http_proxyに
あなたがしている場合デフォルトのプロキシを使用すると、トランスポートは、起動時に環境変数を設定すると問題が解決するはずです。
それは(おそらく開発)にリクエストを送信します。それは実際にURLをやっていないので、自分自身を取得し、 How do I configure Go to use a proxy?
がurlfetchパッケージ自体も開発中で、プロキシ設定を尊重しません:
また、この他の質問を参照してください。アプリケーションサーバーに送信し、取得を依頼します。私は便利なdev_appserver.py
のソースを持っていないが、それは、標準の代理変数尊重すべきである:あなたがdev_appserver.py
を開始する前に、それはおそらくうまく動作することを行う場合
export http_proxy='http://user:[email protected]:3210/'
を。上記動作しない場合は
、あなたがfile an issue必要があり、その後、次の回避策を使用します。
func client(ctx *appengine.Context) *http.Client {
if appengine.IsDevAppServer() {
return http.DefaultClient
}
return urlfetch.Client(ctx)
}
これは本番アプリケーションサーバー上のURLfetch APIを使用しますが、そうでない場合は、標準net/http
クライアントを使用しますが、どのdoes honor HTTP_PROXY環境変数。
http.DefaultTransportとhttp.DefaultClientは、App Engineでは使用できません。 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 Engineは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 Engine 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")
これは私のために働いたが、私は "http.NewRequest"ではなく "client.NewRequest" –
私はそれらをセットアップしています。ログイン用のブラウザIDを使用するgolangアプリです。返信ありがとう – GQ77