HTTPutil を使用したリバース プロキシの応答本文へのアクセス
HTTPutil は、Go での強力なリバース プロキシ実装を提供します。ただし、応答本文にアクセスするためのネイティブ機能がありません。この記事では、ReverseProxy 構造体の ModifyResponse フィールドを使用して応答本文を取得し、それを変更するためのソリューションについて説明します。
HTTPutil リバース プロキシの概要
提供されたコード スニペットでは、httputil.NewSingleHostReverseProxy を使用してリバース プロキシが作成されます。このプロキシはリクエストをターゲット URL、www.google.com に転送します。リクエストは /google エンドポイントで処理され、ポート 8099 でリッスンします。
応答本文の取得と変更
応答本文にアクセスして変更するには、ModifyResponse フィールド。このフィールドは、*http.Response ポインタを引数として受け取り、エラーを返す関数を受け入れます。この関数内では、ioutil.ReadAll を使用して応答本文を読み取り、既存の本文を閉じ、本文の内容を変更し、変更した本文を応答に設定し直すことができます。次のコードはこれを示しています。
func rewriteBody(resp *http.Response) (err error) { b, err := ioutil.ReadAll(resp.Body) if err != nil { return err } err = resp.Body.Close() if err != nil { return err } b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1) 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 }このコードでは、応答本文を読み取り、本文内の特定のコンテンツを置換し、それに応じて本文とヘッダーを更新します。この関数を
ModifyResponse フィールドに割り当てることで、クライアントに送信される前に応答本文をインターセプトして操作できます。
以上がHTTPutil リバース プロキシの応答本文にアクセスして変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。