gpt4 book ai didi

http - 在 GO 中获取具有基本身份验证的 http 帖子

转载 作者:IT王子 更新时间:2023-10-29 01:38:31 24 4
gpt4 key购买 nike

我有一个标准的 go http 请求,我试图在下面的代码中正确处理。

func IssueSearchQuery(conf Config) (string, error) {

tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}

var client = &http.Client{
Timeout: time.Second * 60,
Transport: tr,
}
URL := conf.URL + "/api/search"
v := url.Values{}
v.Set("query_expression", "select * from test")
req, err := http.NewRequest("POST", URL,
bytes.NewBufferString(v.Encode()))

req.SetBasicAuth(conf.User, conf.Password)
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
bodyText, err := ioutil.ReadAll(resp.Body)
s := string(bodyText)
return s, err
}

在上面的代码中,我正在连接到服务器,基本身份验证有效,但服务器响应提示说缺少所需的 query_expression 查询参数。如果我执行 curl -u user:pass -d "query_expression=select * from test"--insecure -XPOST 'https://ip:port/api/search' 服务器响应所需的结果。

如果我不使用 url.Values{} 而是手动将我的查询编码到 url 中,代码也可以工作 URL := conf.URL + "/api/ariel/searches?query_expression=select% 20*20from%20test"

我无法弄清楚我的查询参数做错了什么。有人可以帮忙吗?谢谢!

最佳答案

您似乎在尝试将 POST 正文设置为 url 编码值。要么将您的 Content-Type header 设置为 application/x-www-form-urlencoded,然后将它们放入正文中(感谢@hobbs),或者在实际网址而不是正文中使用您的网址编码值:

u, err := url.Parse(conf.URL + "/api/search")
v := url.Values{}
v.Set("query_expression", "select * from test")
u.RawQuery = v.Encode()
req, err := http.NewRequest("POST", u.String(), nil)

通常人们希望 POST 数据在正文中,因此只需添加 req.Header.Set("Content-Type", "application/x-www-form-urlencoded") 即 cocoa 能是最好的。

关于http - 在 GO 中获取具有基本身份验证的 http 帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46593203/

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