Golang实现简单的POST请求
Golang实现简单的POST请求 我有示例代码
func MakeRequest() {
formData := url.Values{
"name": {"masnun"},
}
resp, err := http.PostForm("https://httpbin.org/post.php", formData)
if err != nil {
log.Fatalln(err)
}
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
log.Println(result["form"])
}
如果我的参数是字符串形式,例如:
var url string = "https://httpbin.org/post.php"
var param string = "lastname=Voucher&company_name=Fredy&address=Alcap
如何正确编码并发送POST请求?
更多关于Golang实现简单的POST请求的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我认为你可以使用 url.parseQuery 从查询字符串中获取切片形式的数据
m, _ := url.ParseQuery(`array=10&array=11`)
fmt.Println(m["array"][0], m["array"][1])
firstname=ghbdtn rfr ltkf&email=mymail.ru&lastname=vdsvsdvvs&company_name=sdv&address=sdc&password=1234321®_user=1
感谢您的回答,就我而言,参数是字符串形式,我现在只是无法正确实现POST请求。
你可以将其转换为切片。例如 🙂
str := "firstname=ghbdtnrfrtkf&email=mymail.ru&lastname=vdsvsdvvs&company_name=sdvaddress=sdcpassword=1234321®_user=1"
x := strings.Split(str, "&")
urlData := url.Values{}
for _, value := range x{
a := strings.Split(value, "=")
urlData.Set(a[0], a[1])
}
fmt.Println(urlData)
func main() {
var s, _ = url.ParseQuery("firstname=ghbdtn rfr ltkf&email=mymail.ru&lastname=vdsvsdvvs&company_name=sdv&address=sdc&password=1234321®_user=1")
req, _ := http.PostForm("https://shop.vidict.net/register.php", s)
req.Header.Set("content-type", "application/x-www-form-urlencoded")
defer req.Body.Close()
}
我尝试了这段代码但是不工作))
您提供的示例代码已经展示了如何使用http.PostForm发送表单数据,但如果您需要处理字符串形式的参数,可以使用http.Post方法并手动设置内容类型。以下是针对您的情况的解决方案:
首先,将参数字符串转换为io.Reader类型,并设置正确的Content-Type头为application/x-www-form-urlencoded。这里是一个完整的示例:
package main
import (
"bytes"
"encoding/json"
"io"
"log"
"net/http"
"strings"
)
func MakeRequestWithStringParams() {
url := "https://httpbin.org/post"
param := "lastname=Voucher&company_name=Fredy&address=Alcap"
// 创建请求体
body := strings.NewReader(param)
// 发送POST请求
resp, err := http.Post(url, "application/x-www-form-urlencoded", body)
if err != nil {
log.Fatalln(err)
}
defer resp.Body.Close()
// 解析响应
var result map[string]interface{}
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
log.Fatalln(err)
}
log.Println(result["form"])
}
如果参数字符串需要进一步编码(例如处理特殊字符),可以使用url.Values来构建和编码参数。以下是另一种方法:
func MakeRequestWithEncodedParams() {
url := "https://httpbin.org/post"
param := "lastname=Voucher&company_name=Fredy&address=Alcap"
// 解析参数字符串为url.Values
values, err := url.ParseQuery(param)
if err != nil {
log.Fatalln(err)
}
// 编码为字符串并创建请求体
encodedParams := values.Encode()
body := strings.NewReader(encodedParams)
resp, err := http.Post(url, "application/x-www-form-urlencoded", body)
if err != nil {
log.Fatalln(err)
}
defer resp.Body.Close()
var result map[string]interface{}
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
log.Fatalln(err)
}
log.Println(result["form"])
}
对于更精细的控制,可以使用http.NewRequest:
func MakeRequestWithCustomRequest() {
url := "https://httpbin.org/post"
param := "lastname=Voucher&company_name=Fredy&address=Alcap"
body := strings.NewReader(param)
req, err := http.NewRequest("POST", url, body)
if err != nil {
log.Fatalln(err)
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Fatalln(err)
}
defer resp.Body.Close()
var result map[string]interface{}
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
log.Fatalln(err)
}
log.Println(result["form"])
}
这些方法都能正确处理字符串形式的参数并发送POST请求。第一个示例最简洁,直接使用http.Post;第二个示例提供了参数编码;第三个示例提供了最大的灵活性。

