私は新しいgolangプログラマです。 Javaでは、メソッドHTTP.setEntity()で設定するのはとても簡単です。しかしgolangでは、私はそれを設定するためのテストservelの方法がありますが、私たちのサーバはまだ失われているエンティティデータを受け取ります。ここで コードは次のとおりです。JavaのメソッドのようにHTTP Postエンティティを設定するにはどうすればいいですか?HttpPost.setEntity
func bathPostDefects(){
url := "http://127.0.0.1/edit"
var jsonStr = []byte(`{"key":"abc","id":"110175653","resolve":2,"online_time":"2016-7-22","priority":1,"comment":"something.."}`)
req, err := http.NewRequest("POST",url,bytes.NewBuffer(jsonStr))
fmt.Println("ContentLength: ",len(jsonStr))
req.Header.Set("Content-Type","application/json")
req.Header.Set("Content-Length",string(len(jsonStr)))
client := &http.Client{}
resp,err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("response Status:", resp.Status)
fmt.Println("response Headers:", resp.Header)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("response Body:", string(body))
}
問題はそれを見つけること、それが私たちのサーブレットが原因で、フォームの値ではなく、リクエストボディを読んで、コードの更新は次の通りです:
func bathPostDefects(){
v := url.Values{}
v.Set("key", "abc")
v.Add("id", "110175653")
v.Add("resolve", "2")
v.Add("online_time", "2016-7-22")
v.Add("priority", "1")
v.Add("comment", "something..")
fmt.Println(v.Get("id"))
fmt.Println(v.Get("comment"))
resp, err := http.PostForm("http://127.0.0.1/edit",v)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("response Status:", resp.Status)
fmt.Println("response Headers:", resp.Header)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("response Body:", string(body))
}
あなたのすべての皆さんに感謝します。
それは私のために動作します。私はhttps://play.golang.org/p/cQmGVyelZuをローカルで実行することができました(PlaygroundはHTTPを無効にします)、https://requestb.in/176m02c1?inspectを取得します –
Carletti、あなたの答えをありがとう、問題は私たちのサーバーは要求の本文ではなくフォームの値を読み取るため、見つけました。あなたの助けに感謝します。:) –