// This example shows how to sign a request when the URL Opaque field is used. // See the note at http://golang.org/pkg/net/url/#URL for information on the // use of the URL Opaque field. func ExampleClient_AuthorizationHeader(client *oauth.Client, credentials *oauth.Credentials) error { form := url.Values{"maxResults": {"100"}} // The last element of path contains a "/". path := "/document/encoding%2gizp" // Create the request with the temporary path "/". req, err := http.NewRequest("GET", "http://api.example.com/", strings.NewReader(form.Encode())) if err != nil { return err } // Overwrite the temporary path with the actual request path. req.URL.Opaque = path // Sign the request. req.Header.Set("Authorization", client.AuthorizationHeader(credentials, "GET", req.URL, form)) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") resp, err := http.DefaultClient.Do(req) if err != nil { return err } defer resp.Body.Close() // process the response return nil }
// Post issues a POST with the specified form. func multipartPost(c *oauth.Client, client *http.Client, credentials *oauth.Credentials, urlStr string, form url.Values, files map[string]struct { filename string r io.Reader }) (*http.Response, error) { var bf = &bytes.Buffer{} mw := multipart.NewWriter(bf) contentType := mw.FormDataContentType() for k := range form { mw.WriteField(k, form.Get(k)) } for field, entry := range files { w, err := mw.CreateFormFile(field, filepath.Base(entry.filename)) if err != nil { return nil, err } _, err = io.Copy(w, entry.r) if err != nil { return nil, err } } mw.Close() req, err := http.NewRequest("POST", urlStr, bf) if err != nil { return nil, err } req.Header.Set("Content-Type", contentType) req.Header.Set("Authorization", c.AuthorizationHeader(credentials, "POST", req.URL, nil)) return client.Do(req) }