2016-09-13 7 views
0

私のエラーは、ここでは説明もある:それはHTTPパッケージの概念の誤解だ場合 https://github.com/golang/go/issues/17088Golangは内部でリクエストの体 "の痕跡を保つhttp.Request

私は知らないが、私は返すために失敗リクエストが送信された後のリクエストの "body"(POSTリクエストが送信するパラメータ)(client.Do)..

例:

func showRequestBody(r *http.Request) { 
    fmt.Println(r) 
    fmt.Println(r.Body) 
} 

は私に空のマップを与えるか、または私が行うとき:r.Formまたはr.PostFormそれがnilまたは空です。

感謝:)(githubのリンクの詳細情報と偉大なコードのハイライトは)

答えて

0

ボディは、文字列ではなくリーダー(より具体的にReadCloser)ではありません。あるバイトを読み終えたら、それをストリームから取り出します。もう一度読むことはできません。

ボディを送信する前にインターセプトする必要があり、ソースから再度読み取ることができない場合は、バッファから新しいReadCloserを再構築する前に、そのオブジェクトをバッファに読み込む方法があります。

編集時点:この時点では、これはほとんどがReading body of http.Request without modifying request state?の複製であることを認識しています。それが何ももたらさないなら私は答えを削除するかもしれません。

+0

しかし、なぜ私が行うとき: n._lastRequest = * REQ \t fmt.Println(n._lastRequest)私は体を持って、client.Do後、私はそれを失った要求の前に ? –

+0

もちろん:[ストリーム](https://en.wikipedia.org/wiki/Stream_(コンピューティング))の「コンテンツ」の送信は、そこから読むことによって行われます。 –

関連する問題