[golang]结合url.Values发送post请求

本文介绍了一个简单的server端和client端示例,展示了如何使用Go语言处理HTTP Post请求,包括发送带有参数的POST请求和在服务器端接收并处理这些参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

server端示例:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) {
        if r.Method == "POST" {
            var (
                name string = r.PostFormValue("name")
                id string = r.PostFormValue("id")
            )
            fmt.Printf("name-id is  : %s %s\n", name, id)
        }
    })

    err := http.ListenAndServe(":8888", nil)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
}

client端示例

package main

import (
    "fmt"
    "net/http"
    "net/url"
    "strings"
)

func test1() {
    data := make(url.Values)
    data["name"] = []string{"xiaoming"}
    data["id"] = []string{"123456"}

    res, err := http.PostForm("http://127.0.0.1:8888/test", data)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    defer res.Body.Close()
    fmt.Println("[PostForm] request1 sent successfully.")
}

func test2() {
	apiUrl := "http://127.0.0.1:8888"
    resource := "/test"
    data := url.Values{}
    data.Set("name", "xiaohua")
    data.Set("id", "654321")

    u, _ := url.ParseRequestURI(apiUrl)
    u.Path = resource
    urlStr := u.String()

    client := &http.Client{}
    r, _ := http.NewRequest("POST", urlStr, strings.NewReader(data.Encode()))
    r.Header.Add("Content-Type", "application/x-www-form-urlencoded")

    resp, err := client.Do(r)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    defer resp.Body.Close()
    fmt.Println("[client.Do] request2 sent successfully.")
}

func main() {
    test1()
    test2()
}

### Golang 实现 POST 请求的方法 在 Golang 中,可以通过标准库 `net/http` 包来实现 HTTP POST 请求。以下是一个完整的示例代码,展示了如何创建并发送一个 POST 请求,同时设置请求头和请求体。 ```go package main import ( "bytes" "fmt" "io/ioutil" "log" "net/http" ) func main() { // 定义目标URL url := "http://example.com" // 定义请求体(JSON格式为例) jsonData := `{"key":"value"}` payload := bytes.NewBuffer([]byte(jsonData)) // 创建POST请求 req, err := http.NewRequest("POST", url, payload) if err != nil { log.Fatal("创建请求失败:", err) } // 设置请求头 req.Header.Set("Content-Type", "application/json") // 设置为JSON格式 req.Header.Set("Authorization", "Bearer your_token_here") // 示例自定义头 // 发送请求 client := &http.Client{} resp, err := client.Do(req) if err != nil { log.Fatal("发送请求失败:", err) } defer resp.Body.Close() // 读取响应 body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal("读取响应失败:", err) } // 打印响应 fmt.Println("响应状态:", resp.Status) fmt.Println("响应内容:", string(body)) } ``` #### 代码说明 1. 使用 `bytes.NewBuffer` 方法将请求体数据转换为 `io.Reader` 类型[^1]。 2. 使用 `http.NewRequest` 方法创建一个新的 HTTP POST 请求,并指定 URL请求体[^4]。 3. 设置请求头信息,例如 `Content-Type` 和其他自定义头字段[^2]。 4. 使用 `http.Client` 的 `Do` 方法发送请求,并处理返回的响应[^3]。 5. 最后读取并打印响应内容。 ### 注意事项 - 如果请求体是表单数据,可以使用 `url.Values` 来构造表单数据,并通过 `http.PostForm` 方法发送请求[^3]。 - 确保正确处理可能的错误情况,例如网络问题或无效的 JSON 数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值