2012-06-08 18:11
浏览 1.6k


I'm having some trouble sending a simple POST request with the http package:

var http_client http.Client

req, err := http.NewRequest("POST", "http://login.blah", nil)
if err != nil {
  return errors.New("Error creating login request: " + err.Error())
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
body := fmt.Sprintf("?username=%s&password=%s&version=%d", client.Username, client.Password, launcherVersion)
fmt.Println("Body:", body)
req.Body = ioutil.NopCloser(bytes.NewBufferString(body))
resp, err := http_client.Do(req)

if err != nil {
  return errors.New("Error sending login request: " + err.Error())

I see the correct body from the print:

Body: ?username=test&password=test&version=13

But after 60 seconds, I get:

Error sending login request: unexpected EOF

I'm sure it has something to do with how I set the request body, because watching it with Wireshark shows me the request, which goes out right away, has a Content-Length of 0 with no body.

Host: login.blah
User-Agent: Go http package
Content-Length: 0
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douyou1901 2012-06-08 19:55

    Your body string looks like the end of an URL, just like it would be if you were sending your parameter in a GET request.

    The server probably expects the body of your POST request to be in multipart/form-data format as defined in

    I think you should either

    • use a multipart.Writer to build your body.

    • use PostForm as in the package example :

      resp, err := http.PostForm("",
          url.Values{"key": {"Value"}, "id": {"123"}})
    解决 无用
    打赏 举报

相关推荐 更多相似问题