Go のリバース プロキシの応答本文にアクセスするにはどうすればよいですか?
Nov 19, 2024 pm 04:39 PMGo のリバース プロキシで応答本文にアクセスする方法
Go では、httputil/reverseproxy パッケージがリバース プロキシを実装する便利な方法を提供しますサーバ。ただし、基になる HTTP リクエストの応答本文にアクセスするのは難しい場合があります。
元のコード
指定された Go コードは、単純なリバース プロキシ サーバーを示しています。
package main import ( "net/http" "net/http/httputil" "net/url" ) func main() { target := &url.URL{Scheme: "http", Host: "www.google.com"} proxy := httputil.NewSingleHostReverseProxy(target) http.Handle("/google", proxy) http.ListenAndServe(":8099", nil) }
レスポンスボディへのアクセス
レスポンスボディにアクセスするには、httputil/reverseproxy パッケージが提供する ModifyResponse 関数を利用できます。この関数を使用すると、HTTP 応答をクライアントに送信する前に変更できます。
ModifyResponse 関数を実装すると、応答に対して次のようなさまざまな操作を実行できます。
- Read応答本文を変更します
- カスタム ヘッダーを設定します
- 応答をリダイレクトします
例
方法の例を次に示します応答本文を変更できます:
func rewriteBody(resp *http.Response) (err error) { b, err := ioutil.ReadAll(resp.Body) // Read html if err != nil { return err } err = resp.Body.Close() if err != nil { return err } b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1) // replace html body := ioutil.NopCloser(bytes.NewReader(b)) resp.Body = body resp.ContentLength = int64(len(b)) resp.Header.Set("Content-Length", strconv.Itoa(len(b))) return nil } target, _ := url.Parse("http://example.com") proxy := httputil.NewSingleHostReverseProxy(target) proxy.ModifyResponse = rewriteBody
この方法で ModifyResponse 関数を実装すると、クライアントに送信される前に応答本文を変更して読み取ることができます。
以上がGo のリバース プロキシの応答本文にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?
