title: Content-Length header is not set in Golang http client request using PUT method
body: <p>I'm using Golang 1.4.2 (built from source) and when I try to make an HTTP PUT request via http.Client.Do() the Content-Length header is missing from the request. All my other headers are sent... Am I doing something wrong? When I make the same request via CURL the content-length header is sent. My requests are being made to etcd server, which is setting all my keys to empty values. While this is somewhat novel, it is hardly useful. :)</p>
  
  <p><a href="http://play.golang.org/p/pIoB--bXUT" rel="nofollow">http://play.golang.org/p/pIoB--bXUT</a></p>
  
  <pre><code>package main
  
  import (
      "bytes"
      "fmt"
      "net/http"
      "net/http/httputil"
      "net/url"
      "strconv"
  )
  
  func main() {
      put := url.Values{}
      put.Set("value", "WHOAH here is my stuff")
      put.Add("ttl","")
      encode := put.Encode()
      req, _ := http.NewRequest("PUT", "http://localhost:2379/v2/keys/somekey", bytes.NewBufferString(encode))
      req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
      req.Header.Add("Content-Length", strconv.Itoa(len(encode)))
      req.Header.Add("X-Content-Length", strconv.Itoa(len(encode)))
      dump, _ := httputil.DumpRequest(req, true)
      fmt.Println(string(dump))
  }
  </code></pre>
  
  <p>yields</p>
  
  <pre><code>PUT /v2/keys/somekey HTTP/1.1
  Host: localhost
  Content-Type: application/x-www-form-urlencoded
  X-Content-Length: 33
  
  ttl=&amp;value=WHOAH+here+is+my+stuff
  </code></pre>