转载的文章
golang 模拟浏览器 发送application/x-www-form-urlencoded的post请求
这里涉及到了一个x-www-form-urlencoded和json中数据格式的校验
python 代码如下
import urllib.parse
values={}
values['username']='02'
values['password']='ddddd'
values['number']= 3
values['number2']= "4"
url="http://www.baidu.com"
data=urllib.parse.urlencode(values)
print(data)
输出(无论是啥,都被解析成string)
username=02&password=ddddd&number=3&number2=4
go 代码如下
package main
import (
"fmt"
"net/url"
)
func main() {
data := map[string]string{
"name": "name",
"product": "product",
"priority": "1",
}
//post要提交的数据,不接受int,所以上面只能写成map[string]string
DataUrlVal := url.Values{}
for key, val := range data {
DataUrlVal.Add(key, val)
}
fmt.Println(DataUrlVal.Encode())
}
输出
name=name&priority=1&product=product
json int 和string 直接有区别
go 代码如下
package main
import (
"encoding/json"
"fmt"
)
type Project struct {
Name string `json:"name"`
Url string `json:"url"`
Docs string `json:"docs,omitempty"` //进行对比
Num int `json:"num"`
}
func main() {
p1 := Project{
Name:"hello name",
Url:"https://www.baidu.com/",
Num: 12,
}
data, err := json.Marshal(p1)
if err != nil {
panic(err)
}
// Docs定义为omitempty所以不会出现Docs的字段
fmt.Printf("%s\n", data)
}
输出
{"name":"hello name","url":"https://www.baidu.com/","num":12}
字符串的形式,注意num
package main
import (
"encoding/json"
"fmt"
)
type Project struct {
Name string `json:"name"`
Url string `json:"url"`
Docs string `json:"docs,omitempty"` //进行对比
Num string `json:"num"`
}
func main() {
p1 := Project{
Name:"hello name",
Url:"https://www.baidu.com/",
Num: "12",
}
data, err := json.Marshal(p1)
if err != nil {
panic(err)
}
// Docs定义为omitempty所以不会出现Docs的字段
fmt.Printf("%s\n", data)
}
输出
{"name":"hello name","url":"https://www.baidu.com/","num":"12"}