我是 Golang 的新手,来自 python 背景,我在管理表单请求时遇到了一些问题。
我正在尝试使用 Go 以表单格式发送数据,以模仿这个 curl 调用:
curl -X POST -k --cacert mycert --key mykey --cert cert "https://api/v1/house?action=paint&room=hall" -F "houses=street123"
这是我在 API 服务器(在 Flask 上运行)中看到的,通过 curl 检查请求头和表单信息进行调用。
标题
Host: localhost
Connection: close
Content-Length: 152
User-Agent: curl/7.29.0
Accept: */*
Content-Type: multipart/form-data; boundary=----------------------------991133af3afb
形式
ImmutableMultiDict([('houses', 'street123')])
当我使用我的 GO 代码执行此操作时,我得到以下信息:
标题
Host: localhost
Connection: close
Content-Length: 18
User-Agent: Go-http-client/1.1
Accept-Encoding: */*
Content-Type: multipart/form-data
形式
ImmutableMultiDict([])
我在做什么:
1-我正在生成一个客户端以Generate_client使用相互 tls 进行身份验证
2-我正在使用map[string][]string作为有效负载的 API 调用并在调用之前打印它以确保它已正确构造。
我在调用函数时返回正文并打印它。
这是我的结果:
Doing Form call
Params after maping:map[houses:[street123]]
FULL-URL:https://api/v1/house?action=paint&room=hall
Params encoded:&{houses=street123 0 -1}
这是我的代码
func Generate_client() *http.Client {
caCert, err := ioutil.ReadFile(cacert)
checkForErrors(err)
caCertPool := x509.NewCertPool()
caCertPool.AppendCertsFromPEM(caCert)
// Create key pair for certificate
cert, err := tls.LoadX509KeyPair(cert, key)
checkForErrors(err)
client := &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
RootCAs: caCertPool,
Certificates: []tls.Certificate{cert},
},
},
}
return client
}
func CallFormUrl(endpoint string, method string, dataPayload []string) string {
fmt.Println("Doing Form call")
FormMap := ConvertPayloadToMap(dataPayload)
params := url.Values{}
for key, value:= range FormMap{
params.Add(key,value)
}
}
为什么没有发送表单数据?
慕工程0101907
相关分类