gpt4 book ai didi

go - 如何通过在Golang中发送POST来解析400个状态代码?

转载 作者:行者123 更新时间:2023-12-01 22:21:11 27 4
gpt4 key购买 nike

我有Python脚本,可以正常工作

def register():
url = prime_url + '/v2/mobile/user/register?lang=ru'
payload = {
'email' : 'test@test.test.mail.com',
'deviceId' : 'testId',
'password' : 'Test1234'
}
response = requests.post(url, data = payload)
print(response.text)
响应:

{“成功”:true,“数据”:“SUCCESS_FIRST_STAGE_REGISTER”,“参数”:“发送到test@testtest.test.mail.com的两因素身份验证代码”,“代码”:200,“运行时间”:2.391624927520752}

我在Golang上编写了代码:
func postRequest(target string, params string) {
var jsonStr = []byte(`{"email":"testtestetetsees@mail.ru", "deviceId":"ftefst891", "password":"qwertyQwerty132"}`)

req, err := http.NewRequest("POST", target, bytes.NewBuffer(jsonStr))
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{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
响应:

map [代码:400数据:ERROR_VALIDATE参数: map [设备ID:[设备ID不能为空。]电子邮件:[电子邮件不能为空。]密码:[密码不能为空。]]运行时间:0.023465871810913086成功:假]

我看到那个问题是通过发送JSON字符串。我该怎么办?

最佳答案

正如Peter在评论中提到的,一旦将数据转换为PostForm,就可以使用 url.Values

如果服务器希望使用urlencoded形式的内容,但是输入的内容是json,则必须先将其转换。

var data = []byte(`{"email":"testtestetetsees@mail.ru", "deviceId":"ftefst891", "password":"qwertyQwerty132"}`)

m := map[string]string{}
if err := json.Unmarshal(data, &m); err != nil {
panic(err)
}

v := url.Values{}
for key, val := range m {
v.Add(key, val)
}

resp, err := http.PostForm("https://example.com", v)
if err != nil {
panic(err)
}

// ...
如果您输入的内容已经采用urlencode格式,但是需要转义,则可以使用 url.ParseQuery对其进行解析,然后让其结果进行转义。
var data = "email=testtestetetsees@mail.ru&deviceId=ftefst891&password=qwertyQwerty132"

v, err := url.ParseQuery(data)
if err != nil {
panic(err)
}

resp, err := http.PostForm("https://example.com", v)
if err != nil {
panic(err)
}

// ...

关于go - 如何通过在Golang中发送POST来解析400个状态代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63498855/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com