| 194 | } |
| 195 | |
| 196 | func (c *client) createRequestForURL(method string, u string, requestBody interface{}, logger log.Logger) ( |
| 197 | *http.Request, |
| 198 | error, |
| 199 | ) { |
| 200 | buffer := &bytes.Buffer{} |
| 201 | if requestBody != nil { |
| 202 | switch c.config.RequestEncoding { |
| 203 | case config.RequestEncodingDefault: |
| 204 | fallthrough |
| 205 | case config.RequestEncodingJSON: |
| 206 | err := json.NewEncoder(buffer).Encode(requestBody) |
| 207 | if err != nil { |
| 208 | // This is a bug |
| 209 | err := message.Wrap(err, message.EHTTPFailureEncodeFailed, "BUG: HTTP request encoding failed") |
| 210 | logger.Critical(err) |
| 211 | return nil, err |
| 212 | } |
| 213 | case config.RequestEncodingWWWURLEncoded: |
| 214 | encoder := schema.NewEncoder() |
| 215 | form := url.Values{} |
| 216 | if err := encoder.Encode(requestBody, form); err != nil { |
| 217 | err := message.Wrap(err, message.EHTTPFailureEncodeFailed, "BUG: HTTP request encoding failed") |
| 218 | logger.Critical(err) |
| 219 | return nil, err |
| 220 | } |
| 221 | buffer.WriteString(form.Encode()) |
| 222 | default: |
| 223 | panic(fmt.Errorf("invalid request encoding: %s", c.config.RequestEncoding)) |
| 224 | } |
| 225 | } |
| 226 | req, err := http.NewRequest( |
| 227 | method, |
| 228 | u, |
| 229 | buffer, |
| 230 | ) |
| 231 | if err != nil { |
| 232 | err := message.Wrap(err, message.EHTTPFailureEncodeFailed, "BUG: HTTP request encoding failed") |
| 233 | logger.Critical(err) |
| 234 | return nil, err |
| 235 | } |
| 236 | for header, values := range c.extraHeaders { |
| 237 | for i, value := range values { |
| 238 | if i == 0 { |
| 239 | req.Header.Set(header, value) |
| 240 | } else { |
| 241 | req.Header.Add(header, value) |
| 242 | } |
| 243 | } |
| 244 | } |
| 245 | switch c.config.RequestEncoding { |
| 246 | case config.RequestEncodingDefault: |
| 247 | fallthrough |
| 248 | case config.RequestEncodingJSON: |
| 249 | req.Header.Set("Content-Type", "application/json") |
| 250 | case config.RequestEncodingWWWURLEncoded: |
| 251 | req.Header.Set("Content-Type", "application/x-www-form-urlencoded") |
| 252 | default: |
| 253 | panic(fmt.Errorf("invalid request encoding: %s", c.config.RequestEncoding)) |