2017-01-13 2 views
0

ich den folgenden curl Befehl gegen meine App getestet haben, und es kehrt erfolgreich:POST mit Go nicht, sondern arbeitet mit curl

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

jedoch die oben in gehen zu replizieren versuchen, eine ziemliche Herausforderung hat bewiesen, ich halte einen 400 Bad Request Fehler vom Server bekommen, hier ist der Code:

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) 

ich das goreq Paket bin mit, ich habe mindestens 3 oder 4 andere Pakete ohne Unterschied versucht. Der Fehler, den ich bekommen ist:

<!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> 

Antwort

6

Sie einen json Körper mit Ihrem Go-Code zu senden, aber einen application/x-www-form-urlencoded Körper mit Curl.

Sie die Zeichenfolge kodieren, können manuell, wie Sie mit curl getan haben:

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

Thankyou:

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

Oder können Sie eine url.Values richtig den Körper verwenden zu kodieren! Das funktioniert! – Jonathan

Verwandte Themen