Go语言 使用身份验证参数的HTTP连接失败

wnavrhmk  于 2022-12-31  发布在  Go
关注(0)|答案(1)|浏览(257)

转到1.19
我正在尝试连接到网络中另一台计算机上运行的服务器。收到的响应告诉我有错误,服务器上的日志文件指出问题是密码不正确。但是,我传递的是正确的密码。
下面是我正在使用的代码段:

bodyParams := "{\"param1\":\"val1\", \"param2\":\"val2\", \"param3\":\"val3\"}"
requestBody, e := json.Marshal (bodyParams)

request, _ := http.NewRequest ("POST", "http://192.168.1.31:8972/", bytes.NewBuffer (requestBody))
request.Header.Set ("Content-Type", "application/json")
request.SetBasicAuth ("username", "password")

client := http.Client { Timeout: time.Duration (5 * time.Second) }
response, f := client.Do (request)

body, g := ioutil.ReadAll (response.Body)

response.Body.Close ()

我是一个新手,但是我从很多例子中得到了这个代码。我认为唯一不起作用的是身份验证。
有没有一些字符不能包含在go的密码中?我可以在C中使用相同的密码连接,所以我知道它不能是密码本身,但也许在go中有一些限制?C代码使用curlCURLOPT_USERPWD选项来设置用户名和密码。go有没有等价于CURLOPT_USERPWD的代码?
如果能提出解决这一问题的任何想法,我们将不胜感激。

nafvub8i

nafvub8i1#

我最初尝试这样做时有几处错误。
首先,我正在整理JSON字符串,这并不需要做,我怀疑这是它不工作的主要原因,而不是我之前怀疑的身份验证代码。
其次,我使用了bytes.NewBuffer,但是当我们传递字符串时,strings.NewReader是必需的。
第三,ioutil.ReadAll已经过时,我们现在应该使用io.ReadAll
所以,这是对上面代码的修改,我可以让它工作。

bodyParams := "{\"param1\":\"val1\", \"param2\":\"val2\", \"param3\":\"val3\"}"

request, _ := http.NewRequest ("POST", "http://192.168.1.31:8972/", strings.NewReader (bodyParams))
request.Header.Set ("Content-Type", "application/json")
request.SetBasicAuth ("username", "password")

client := http.Client { Timeout: time.Duration (5 * time.Second) }
response, _ := client.Do (request)

body, _ := io.ReadAll (response.Body)

response.Body.Close ()

相关问题