2016-07-22 1 views
0

私は新しい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)) 
} 

あなたのすべての皆さんに感謝します。

+1

それは私のために動作します。私はhttps://play.golang.org/p/cQmGVyelZuをローカルで実行することができました(PlaygroundはHTTPを無効にします)、https://requestb.in/176m02c1?inspectを取得します –

+0

Carletti、あなたの答えをありがとう、問題は私たちのサーバーは要求の本文ではなくフォームの値を読み取るため、見つけました。あなたの助けに感謝します。:) –

答えて

1

私はNewBufferStringを使用するビットのコードを変更し、要求の体を印刷し、サーバーと一緒にそれをテストした:

package main 

import (
    "bytes" 
    "fmt" 
    "io/ioutil" 
    "log" 
    "net/http" 
    "time" 
) 

func bathPostDefects() { 
    url := "http://127.0.0.1:4141/" 
    var jsonStr = `{"key":"abc","id":"110175653","resolve":2,"online_time":"2016-7-22","priority":1,"comment":"something.."}` 
    req, err := http.NewRequest("POST", url, bytes.NewBufferString(jsonStr)) 
    fmt.Println("ContentLength: ", len(jsonStr)) 
    req.Header.Set("Content-Type", "application/json") 
    req.Header.Set("Content-Length", string(len(jsonStr))) 
    client := &http.Client{} 
    _, err = client.Do(req) 
    if err != nil { 
     panic(err) 
    } 
} 

func server() { 
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { 
     body, _ := ioutil.ReadAll(r.Body) 
     fmt.Println("Body: ", string(body)) 
    }) 

    log.Fatal(http.ListenAndServe(":4141", nil)) 
} 
func main() { 
    go server() 
    time.Sleep(time.Second) 

    bathPostDefects() 
} 
+0

ねえ! @ plutov、私はこの問題をsloved感謝。あなたのリプレイに感謝します。 –

関連する問題