http - 如何通过 http 客户端发送表单数据?
问题描述
我的 post 请求有问题,需要通过 http 客户端发送简单的表单数据。http.PostForm() 不行,因为我需要设置自己的用户代理和其他标头。
这是示例
func main() {
formData := url.Values{
"form1": {"value1"},
"form2": {"value2"},
}
client := &http.Client{}
//Not working, the post data is not a form
req, err := http.NewRequest("POST", "http://test.local/api.php", strings.NewReader(formData.Encode()))
if err != nil {
log.Fatalln(err)
}
req.Header.Set("User-Agent", "Golang_Super_Bot/0.1")
resp, err := client.Do(req)
if err != nil {
log.Fatalln(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalln(err)
}
log.Println(string(body))
}
解决方案
您还需要设置与application/x-www-form-urlencoded
所使用的编码相对应的内容类型Value.Encode()
。
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
这是Client.PostForm所做的事情之一。
推荐阅读
- html - 如何在网络上的移动和桌面上设置徽标样式?
- facebook - Facebook:当 Webhook 仅在 Pushlish 模式下运行时,如何证明 publish_pages 正确?
- google-apps-script - 有条件地运行 Google 表格自定义函数
- html - Shopify如何让产品图片全屏显示?
- python - 使用 BeautifulSoup 从 HTML 表中抓取一列
- r - 在R中没有if语句的情况下从向量中删除
- c - 数据未在队列中堆叠
- arrays - 为什么在 scala.Array Companion 对象中没有 apply(x: String, xs: String*): Array[String] 重载?
- c# - Hide and Show Code doesnt work on other forms
- c++ - 重载括号运算符有什么作用?