client端
package main
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"net/url"
)
func main() {
request_url := "http://localhost:8080/"
// 要 POST的 参数
form := url.Values{
"name": {"xiaoming"},
"address": {"beijing"},
"subject": {"Hello"},
"from": {"china"},
}
// func Post(url string, bodyType string, body io.Reader) (resp *Response, err error) {
//对form进行编码
body := bytes.NewBufferString(form.Encode())
rsp, err := http.Post(request_url, "application/x-www-form-urlencoded", body)
if err != nil {
panic(err)
}
defer rsp.Body.Close()
body_byte, err := ioutil.ReadAll(rsp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body_byte))
}
server端
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", ExampleHandler)
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}
func ExampleHandler(w http.ResponseWriter, r *http.Request) {
// Double check it's a post request being made
if r.Method != http.MethodPost {
w.WriteHeader(http.StatusMethodNotAllowed)
fmt.Fprintf(w, "invalid_http_method")
return
}
// Must call ParseForm() before working with data
r.ParseForm()
// Log all data. Form is a map[]
log.Println(r.Form)
// Print the data back. We can use Form.Get() or Form["name"][0]
fmt.Fprintf(w, "Hello "+r.Form.Get("name"))
}
//可以直接命令行请求
//curl -X POST http://localhost:8080 -d "name=zhangsan"