0
我是一個新的golang程序員。在java中,使用方法HTTP.setEntity()很容易設置。但在golang中,我有測試servel的方式來設置它,但我們的服務器仍然缺少接收實體數據。 這裏是代碼:如何設置HTTP Post實體像Java的方法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))
}
問題找到了,這是導致我們的servlet已經閱讀形式的值,而不是請求體,代碼更新如下:
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,感謝您的回答,問題是發現,因爲我們的服務器是讀取表單值而不是請求體。非常感謝您的幫助。:) –