2017-01-13 77 views
0

我對我的應用程序測試了以下curl命令的工作原理,併成功返回:POST一起去失敗,但捲曲

curl --data "username=john&password=acwr6414" http://127.0.0.1:5000/api/login 

但是試圖複製在去上面已經證明了相當大的挑戰,我保持從服務器得到一個400錯誤請求錯誤,下面的代碼:

type Creds struct { 
     Username string `json:"username"` 
     Password string `json:"password"` 
    } 

user := "john" 
pass := "acwr6414" 

    creds := Creds{Username: user, Password: pass} 
    res, err := goreq.Request{ 
     Method: "POST", 
     Uri:  "http://127.0.0.1:5000/api/login", 
     Body:  creds, 
     ShowDebug: true, 
    }.Do() 
    fmt.Println(res.Body.ToString()) 
    fmt.Println(res, err) 

我使用goreq包,我已經試過至少3個或4個其他套餐,沒有區別。我得到的錯誤是:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<title>400 Bad Request</title> 
<h1>Bad Request</h1> 
<p>The browser (or proxy) sent a request that this server could not understand.</p> 

回答

6

你發送一個JSON體與Go代碼,而是一個application/x-www-form-urlencoded體捲曲。

您可以手動編碼作爲你的捲曲做字符串:

Body:  "password=acwr6414&user=john", 

或者你可以使用一個url.Values正確編碼身體:

creds := url.Values{} 
creds.Set("user", "john") 
creds.Set("password", "acwr6414") 

res, err := goreq.Request{ 
    ContentType: "application/x-www-form-urlencoded", 
    Method:  "POST", 
    Uri:   "http://127.0.0.1:5000/api/login", 
    Body:  creds.Encode(), 
    ShowDebug: true, 
}.Do() 
+0

三江源!這工作! – Jonathan