ホームページ  >  記事  >  バックエンド開発  >  HTTPutil リバース プロキシの応答本文にアクセスして変更する方法

HTTPutil リバース プロキシの応答本文にアクセスして変更する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-11-12 14:49:02873ブラウズ

How to Access and Modify Response Body in an HTTPutil Reverse Proxy?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。