Я хочу добавить новое значение в форму публикации, прежде чем перенаправить ее с помощью ReverseProxy - PullRequest
3 голосов
/ 02 марта 2020

Я пишу ReverseProxy со специальным требованием, используя GOLANG ReverseProxy работает просто отлично. Но у меня есть проблема со специальным требованием, которое пользователи отправляют. Http Post Form содержит пользователя и адрес электронной почты. Я хочу добавить новое значение в форму Post. код

package main

import (
    "log"
    "net/http"
    "net/http/httputil"
    "net/url"
)

func main() {
    origin, _ := url.Parse("http://localhost:9000/")

    director := func(req *http.Request) {
        req.Header.Add("X-Forwarded-Host", req.Host)
        req.Header.Add("X-Origin-Host", origin.Host)
        req.URL.Scheme = "http"
        req.URL.Host = origin.Host
    }

    proxy := &httputil.ReverseProxy{Director: director}

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        proxy.ServeHTTP(w, r)
    })

    log.Fatal(http.ListenAndServe(":8080", nil))
}

Я пробовал R.Form.add и r.PostForm.add и r.Form.set r.PostForm.set Не работает.

1 Ответ

0 голосов
/ 03 марта 2020

Вы можете попробовать это.

func main() {
    origin, _ := url.Parse("http://localhost:9000/")

    director := func(req *http.Request) {
        req.Header.Add("X-Forwarded-Host", req.Host)
        req.Header.Add("X-Origin-Host", origin.Host)
        req.URL.Scheme = "http"
        req.URL.Host = origin.Host
    }

    proxy := &httputil.ReverseProxy{Director: director}

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        r.ParseForm()
        form := r.Form
        form.Add("hello", "world")
        body := form.Encode()
        r.Body = ioutil.NopCloser(strings.NewReader(body))
        r.ContentLength = int64(len(body))
        proxy.ServeHTTP(w, r)
    })

    log.Fatal(http.ListenAndServe(":8080", nil))
}
...