Golang中如何发送包含URL变量的POST请求到服务器
Golang中如何发送包含URL变量的POST请求到服务器 大家好
我正尝试通过PUT方法发送POST请求,将数据输入到键值存储中…如果有更好的方法,请告诉我!
PUT方法用于更新键/值对…所以我先删除键/值对,然后插入新的键/值对来替代它…
请看下面的代码:
case urv.Get("key") != "" && urv.Get("value") != "" && urv.Get("newvalue") != "": //edit the value in that key.
toremove := false
for i, v := range data[urv.Get("key")] {
if v == urv.Get("value") {
toremove = true
if toremove == true {
if len(data[urv.Get("key")])-1 == i {
data[urv.Get("key")] = data[urv.Get("key")][:i]
} else {
data[urv.Get("key")] = append(data[urv.Get("key")][:i], data[urv.Get("key")][i+1:]...)
}
break
}
}
}
if !toremove {
fmt.Fprintf(w, "Value: %v doesn't exist in the data store", urv.Get("value"))
return
}
data[urv.Get("key")] = append(data[urv.Get("key")], urv.Get("newvalue"))
以上代码都能正常工作…但我不想使用data[urv.Get("key")] = append(data[urv.Get("key")], urv.Get("newvalue")),而是想使用http.POST或http.NewRequest方法通过链接发送POST请求来输入这些数据…
我有类似下面的用户输入数据
http://localhost:8080/&key=key&value=value&datatype=datatype
上面的代码很直观,它会将数据插入到映射中,使用URL中定义的键、值和数据类型…
我需要使用POST请求的原因是为了让用户选择他们想要存储的数据类型…
我在考虑类似这样的方式:
http.NewRequest("POST", "http://localhost:8080/?key="+urv.Get("key")+"?values="+urv.Get("value")+"?datatype="+urv.Get("datatype")
urv.Get函数将从URL中获取特定参数。
谢谢 🙂
更多关于Golang中如何发送包含URL变量的POST请求到服务器的实战教程也可以访问 https://www.itying.com/category-94-b0.html
实际上那里的if语句完全没有意义……我刚刚意识到哈哈哈,谢谢老兄!
更多关于Golang中如何发送包含URL变量的POST请求到服务器的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
RipRoss:
toremove = true
if toremove == true {
你确定这样写没问题吗?

在Go语言中,发送包含URL变量的POST请求可以使用http.NewRequest方法。以下是完整的示例代码:
package main
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"net/url"
)
func main() {
// 方法1:使用URL查询参数
baseURL := "http://localhost:8080/"
params := url.Values{}
params.Add("key", "mykey")
params.Add("value", "myvalue")
params.Add("datatype", "string")
// 创建请求
req, err := http.NewRequest("POST", baseURL+"?"+params.Encode(), nil)
if err != nil {
panic(err)
}
// 发送请求
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
// 读取响应
body, _ := ioutil.ReadAll(resp.Body)
fmt.Printf("Response: %s\n", body)
}
或者使用请求体发送数据:
func sendPostWithBody() {
// 方法2:使用请求体发送表单数据
data := url.Values{}
data.Set("key", "mykey")
data.Set("value", "myvalue")
data.Set("datatype", "string")
req, err := http.NewRequest("POST", "http://localhost:8080/",
bytes.NewBufferString(data.Encode()))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Printf("Response: %s\n", body)
}
对于你的具体场景,可以这样实现:
func sendUpdateRequest(urv url.Values) {
baseURL := "http://localhost:8080/"
params := url.Values{}
params.Add("key", urv.Get("key"))
params.Add("value", urv.Get("value"))
params.Add("datatype", urv.Get("datatype"))
req, err := http.NewRequest("POST", baseURL+"?"+params.Encode(), nil)
if err != nil {
fmt.Printf("Error creating request: %v\n", err)
return
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Printf("Error sending request: %v\n", err)
return
}
defer resp.Body.Close()
fmt.Println("POST request sent successfully")
}
在服务器端处理POST请求:
func handlePostRequest(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
// 从URL查询参数获取数据
key := r.URL.Query().Get("key")
value := r.URL.Query().Get("value")
datatype := r.URL.Query().Get("datatype")
// 或者从请求体获取数据(如果使用表单方式)
// r.ParseForm()
// key := r.FormValue("key")
// value := r.FormValue("value")
// datatype := r.FormValue("datatype")
fmt.Printf("Received - Key: %s, Value: %s, DataType: %s\n", key, value, datatype)
// 处理数据存储逻辑
// data[key] = append(data[key], value)
fmt.Fprintf(w, "Data received successfully")
}
这种方式允许你通过POST请求发送URL参数,同时保持数据类型的灵活性。

