github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/api/cloudcontroller/ccv2/request.go (about) 1 package ccv2 2 3 import ( 4 "fmt" 5 "io" 6 "net/http" 7 "net/url" 8 9 "code.cloudfoundry.org/cli/api/cloudcontroller" 10 ) 11 12 // Params represents URI parameters for a request. 13 type Params map[string]string 14 15 // requestOptions contains all the options to create an HTTP request. 16 type requestOptions struct { 17 // URIParams are the list URI route parameters 18 URIParams Params 19 20 // Query is a list of HTTP query parameters 21 Query url.Values 22 23 // RequestName is the name of the request (see routes) 24 RequestName string 25 26 // URI is the URI of the request. 27 URI string 28 // Method is the HTTP method of the request. 29 Method string 30 31 // Body is the request body 32 Body io.ReadSeeker 33 } 34 35 // newHTTPRequest returns a constructed HTTP.Request with some defaults. 36 // Defaults are applied when Request fields are not filled in. 37 func (client Client) newHTTPRequest(passedRequest requestOptions) (*cloudcontroller.Request, error) { 38 var request *http.Request 39 var err error 40 if passedRequest.URI != "" { 41 request, err = http.NewRequest( 42 passedRequest.Method, 43 fmt.Sprintf("%s%s", client.API(), passedRequest.URI), 44 passedRequest.Body, 45 ) 46 } else { 47 request, err = client.router.CreateRequest( 48 passedRequest.RequestName, 49 map[string]string(passedRequest.URIParams), 50 passedRequest.Body, 51 ) 52 if err == nil { 53 request.URL.RawQuery = passedRequest.Query.Encode() 54 } 55 } 56 if err != nil { 57 return nil, err 58 } 59 60 request.Header = http.Header{} 61 request.Header.Set("Accept", "application/json") 62 request.Header.Set("User-Agent", client.userAgent) 63 64 if passedRequest.Body != nil { 65 request.Header.Set("Content-Type", "application/json") 66 } 67 68 // Make sure the body is the same as the one in the request 69 return cloudcontroller.NewRequest(request, passedRequest.Body), nil 70 }