netramesh
1// Copyright 2015 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package httputil_test6
7import (8"fmt"9"io/ioutil"10"log"11"net/http"12"net/http/httptest"13"net/http/httputil"14"net/url"15"strings"16)
17
18func ExampleDumpRequest() {19ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {20dump, err := httputil.DumpRequest(r, true)21if err != nil {22http.Error(w, fmt.Sprint(err), http.StatusInternalServerError)23return24}25
26fmt.Fprintf(w, "%q", dump)27}))28defer ts.Close()29
30const body = "Go is a general-purpose language designed with systems programming in mind."31req, err := http.NewRequest("POST", ts.URL, strings.NewReader(body))32if err != nil {33log.Fatal(err)34}35req.Host = "www.example.org"36resp, err := http.DefaultClient.Do(req)37if err != nil {38log.Fatal(err)39}40defer resp.Body.Close()41
42b, err := ioutil.ReadAll(resp.Body)43if err != nil {44log.Fatal(err)45}46
47fmt.Printf("%s", b)48
49// Output:50// "POST / HTTP/1.1\r\nHost: www.example.org\r\nAccept-Encoding: gzip\r\nContent-Length: 75\r\nUser-Agent: Go-http-client/1.1\r\n\r\nGo is a general-purpose language designed with systems programming in mind."51}
52
53func ExampleDumpRequestOut() {54const body = "Go is a general-purpose language designed with systems programming in mind."55req, err := http.NewRequest("PUT", "http://www.example.org", strings.NewReader(body))56if err != nil {57log.Fatal(err)58}59
60dump, err := httputil.DumpRequestOut(req, true)61if err != nil {62log.Fatal(err)63}64
65fmt.Printf("%q", dump)66
67// Output:68// "PUT / HTTP/1.1\r\nHost: www.example.org\r\nUser-Agent: Go-http-client/1.1\r\nContent-Length: 75\r\nAccept-Encoding: gzip\r\n\r\nGo is a general-purpose language designed with systems programming in mind."69}
70
71func ExampleDumpResponse() {72const body = "Go is a general-purpose language designed with systems programming in mind."73ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {74w.Header().Set("Date", "Wed, 19 Jul 1972 19:00:00 GMT")75fmt.Fprintln(w, body)76}))77defer ts.Close()78
79resp, err := http.Get(ts.URL)80if err != nil {81log.Fatal(err)82}83defer resp.Body.Close()84
85dump, err := httputil.DumpResponse(resp, true)86if err != nil {87log.Fatal(err)88}89
90fmt.Printf("%q", dump)91
92// Output:93// "HTTP/1.1 200 OK\r\nContent-Length: 76\r\nContent-Type: text/plain; charset=utf-8\r\nDate: Wed, 19 Jul 1972 19:00:00 GMT\r\n\r\nGo is a general-purpose language designed with systems programming in mind.\n"94}
95
96func ExampleReverseProxy() {97backendServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {98fmt.Fprintln(w, "this call was relayed by the reverse proxy")99}))100defer backendServer.Close()101
102rpURL, err := url.Parse(backendServer.URL)103if err != nil {104log.Fatal(err)105}106frontendProxy := httptest.NewServer(httputil.NewSingleHostReverseProxy(rpURL))107defer frontendProxy.Close()108
109resp, err := http.Get(frontendProxy.URL)110if err != nil {111log.Fatal(err)112}113
114b, err := ioutil.ReadAll(resp.Body)115if err != nil {116log.Fatal(err)117}118
119fmt.Printf("%s", b)120
121// Output:122// this call was relayed by the reverse proxy123}
124