123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- // Copyright (c) 2012-2013 Jason McVetta. This is Free Software, released
- // under the terms of the GPL v3. See http://www.gnu.org/copyleft/gpl.html for
- // details. Resist intellectual serfdom - the ownership of ideas is akin to
- // slavery.
- package napping
- import (
- "bytes"
- "encoding/json"
- "net/http"
- "net/url"
- "strings"
- "time"
- )
- // A Params is a map containing URL parameters.
- type Params map[string]string
- // AsUrlValues converts Params to url.Values
- func (p Params) AsUrlValues() url.Values {
- result := url.Values{}
- for key, value := range p {
- result.Set(key, value)
- }
- return result
- }
- // A Request describes an HTTP request to be executed, data structures into
- // which the result will be unmarshaled, and the server's response. By using
- // a single object for both the request and the response we allow easy access
- // to Result and Error objects without needing type assertions.
- type Request struct {
- Url string // Raw URL string
- Method string // HTTP method to use
- Params *url.Values // URL query parameters
- Payload interface{} // Data to JSON-encode and POST
- // Can be set to true if Payload is of type *bytes.Buffer and client wants
- // to send it as-is
- RawPayload bool
- // Result is a pointer to a data structure. On success (HTTP status < 300),
- // response from server is unmarshaled into Result.
- Result interface{}
- // CaptureResponseBody can be set to capture the response body for external use.
- CaptureResponseBody bool
- // ResponseBody exports the raw response body if CaptureResponseBody is true.
- ResponseBody *bytes.Buffer
- // Error is a pointer to a data structure. On error (HTTP status >= 300),
- // response from server is unmarshaled into Error.
- Error interface{}
- // Optional
- Userinfo *url.Userinfo
- Header *http.Header
- // Custom Transport if needed.
- Transport *http.Transport
- // The following fields are populated by Send().
- timestamp time.Time // Time when HTTP request was sent
- status int // HTTP status for executed request
- response *http.Response // Response object from http package
- body []byte // Body of server's response (JSON or otherwise)
- }
- // A Response is a Request object that has been executed.
- type Response Request
- // Timestamp returns the time when HTTP request was sent.
- func (r *Response) Timestamp() time.Time {
- return r.timestamp
- }
- // RawText returns the body of the server's response as raw text.
- func (r *Response) RawText() string {
- return strings.TrimSpace(string(r.body))
- }
- // Status returns the HTTP status for the executed request, or 0 if request has
- // not yet been sent.
- func (r *Response) Status() int {
- return r.status
- }
- // HttpResponse returns the underlying Response object from http package.
- func (r *Response) HttpResponse() *http.Response {
- return r.response
- }
- // Unmarshal parses the JSON-encoded data in the server's response, and stores
- // the result in the value pointed to by v.
- func (r *Response) Unmarshal(v interface{}) error {
- return json.Unmarshal(r.body, v)
- }
|