英文:
Getting the status code from a get request in golang
问题
我正在尝试在Goland中获取HTTP状态码。
我也传递了授权令牌。
这是我到目前为止尝试的代码:
func StatusCode(PAGE string, AUTH string) (r string){
resp, err := http.NewRequest("GET", PAGE, nil)
if err != nil {
log.Fatal(err)
}
resp.Header.Set("Authorization", AUTH)
fmt.Println("HTTP Response Status:", resp.StatusCode, http.StatusText(resp.StatusCode))
r := resp.StatusCode + http.StatusText(resp.StatusCode)
}
基本上,我想要获取这个:
r = "200 OK"
或者
r = "400 Bad request"
之前的代码中有问题,它在resp.StatusCode
和http.StatusText(resp.StatusCode)
处报错。
英文:
I'm trying to get the http status code in goland.
I'm passing the authorization token as well.
This is what I tried so far:
func StatusCode(PAGE string, AUTH string) (r string){
resp, err := http.NewRequest("GET", PAGE, nil)
if err != nil {
log.Fatal(err)
}
resp.Header.Set("Authorization", AUTH)
fmt.Println("HTTP Response Status:", resp.StatusCode, http.StatusText(resp.StatusCode))
r := resp.StatusCode + http.StatusText(resp.StatusCode)
}
Basically I want to get this:
r = "200 OK"
or
r= "400 Bad request"
The previous code it´s complaining from resp.StatusCode and http.StatusText(resp.StatusCode)
答案1
得分: 3
有两个问题。第一个问题是应用程序将请求用作响应。执行请求以获取响应。
第二个问题是resp.StatusCode + http.StatusText(resp.StatusCode)
无法编译,因为操作数类型不匹配。resp.StatusCode
的值是int
类型。http.StatusText(resp.StatusCode)
的值是string
类型。Go语言没有将数字隐式转换为字符串的功能,这样无法按照你的期望工作。
如果你想要获取服务器发送的状态字符串,可以使用r := resp.Status
。
如果你想要构建一个由服务器状态码和Go语言状态字符串组成的状态字符串,可以使用r := fmt.Sprintf("%d %s", resp.StatusCode, http.StatusText(resp.StatusCode))
。
以下是代码:
func StatusCode(PAGE string, AUTH string) (r string) {
// 设置请求。
req, err := http.NewRequest("GET", PAGE, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", AUTH)
// 执行请求。
resp, err := http.DefaultClient.Do(req)
if err != nil {
return err.Error()
}
// 根据需要关闭响应体。
defer resp.Body.Close()
fmt.Println("HTTP Response Status:", resp.StatusCode, http.StatusText(resp.StatusCode))
return resp.Status
// 或者使用 fmt.Sprintf("%d %s", resp.StatusCode, http.StatusText(resp.StatusCode))
}
以上是翻译好的内容,请确认是否满意。
英文:
There are two problems. The first is that the application uses the request as the response. Execute the request to get the response.
The second problem is that resp.StatusCode + http.StatusText(resp.StatusCode)
does not compile because operand types are mismatched. The value resp.StatusCode
is an int
. The value of http.StatusText(resp.StatusCode)
is a string
. Go does not have the implicit conversion of numbers to strings that would make this work the way you expect.
Use r := resp.Status
if you want the status string as sent from the server.
Use r := fmt.Sprintf("%d %s", resp.StatusCode, http.StatusText(resp.StatusCode))
to construct a status string from the server's status code and the Go's status strings.
Here's the code:
func StatusCode(PAGE string, AUTH string) (r string) {
// Setup the request.
req, err := http.NewRequest("GET", PAGE, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", AUTH)
// Execute the request.
resp, err := http.DefaultClient.Do(req)
if err != nil {
return err.Error()
}
// Close response body as required.
defer resp.Body.Close()
fmt.Println("HTTP Response Status:", resp.StatusCode, http.StatusText(resp.StatusCode))
return resp.Status
// or fmt.Sprintf("%d %s", resp.StatusCode, http.StatusText(resp.StatusCode))
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论