使用http.Client函数发送定制化的HTTP请求并获取响应状态码及响应内容,并设置超时时间

使用http.Client函数发送定制化的HTTP请求

Go语言内置的 net/http 包提供了一个 Client 类型,通过调用其 Do 方法可以发送一个HTTP请求,获取响应状态码以及响应内容。下面将详细介绍如何使用 http.Client 发送定制化的HTTP请求。

创建HTTP请求

在使用 http.Client 发送HTTP请求之前,需要先创建HTTP请求对象,其中包括请求的方法、URL、请求体等信息。下面使用POST方法发送一个JSON格式的HTTP请求:

package main

import (

"bytes"

"encoding/json"

"net/http"

)

func main() {

data := map[string]interface{}{

"name": "John",

"age": 30,

}

body, _ := json.Marshal(data)

req, _ := http.NewRequest(http.MethodPost, "https://example.com/api", bytes.NewReader(body))

req.Header.Set("Content-Type", "application/json")

}

在上面的代码中,创建HTTP请求使用了 http.NewRequest 函数,该函数接收三个参数,分别是请求方法、请求URL、请求体。这里使用了JSON格式的请求体,通过 json.Marshal 函数将map类型的数据转换为字节数组。

第三行代码设置了HTTP请求的Content-Type为application/json,表示请求体是JSON格式的数据。

发送HTTP请求

当HTTP请求对象创建完成后,就可以使用 http.Client 发送HTTP请求了。下面是一个示例:

client := &http.Client{}

resp, err := client.Do(req)

if err != nil {

// handle error

}

defer resp.Body.Close()

在上面的代码中,创建了一个 http.Client 对象,在使用其 Do 方法发送HTTP请求时,需要传入HTTP请求对象作为参数。发送HTTP请求可能会出现错误,需要通过判断返回值中的error来处理错误。最后使用 defer 关键字关闭HTTP响应体。

获取HTTP响应状态码及响应内容

当HTTP请求发送成功后,会收到远程服务器返回的HTTP响应。在获取HTTP响应状态码及响应内容时,需要解析HTTP响应对象,获取其中的状态码和响应体。下面是一个示例:

if resp.StatusCode == http.StatusOK {

// handle success

} else {

// handle failure

}

body, _ := ioutil.ReadAll(resp.Body)

在上面示例中,根据HTTP响应的状态码来区分是成功还是失败的响应。对于成功的响应,可以解析HTTP响应体,通过 ioutil.ReadAll 函数将HTTP响应体读取到字节数组中。

设置超时时间

发送HTTP请求时,有时候需要设置超时时间,防止请求一直等待。下面是一个示例:

client := &http.Client{

Timeout: time.Second * 10, // 设置超时时间为10秒

}

resp, err := client.Do(req)

if err != nil {

// handle error

}

defer resp.Body.Close()

在上面的示例中,创建了一个 http.Client 对象,并设置了超时时间为10秒。当请求等待超过10秒时,将自动取消该请求并返回“net/http: request canceled while waiting for connection”错误。

完整示例

下面是一个完整的示例程序,用来发送定制化的HTTP请求、获取响应状态码及响应内容,并设置超时时间:

package main

import (

"bytes"

"encoding/json"

"fmt"

"io/ioutil"

"net/http"

"time"

)

func main() {

// 创建HTTP请求

data := map[string]interface{}{

"name": "John",

"age": 30,

}

body, _ := json.Marshal(data)

req, _ := http.NewRequest(http.MethodPost, "https://example.com/api", bytes.NewReader(body))

req.Header.Set("Content-Type", "application/json")

// 发送HTTP请求

client := &http.Client{

Timeout: time.Second * 10, // 设置超时时间为10秒

}

resp, err := client.Do(req)

if err != nil {

// handle error

}

defer resp.Body.Close()

// 获取HTTP响应状态码及响应内容

if resp.StatusCode == http.StatusOK {

bodyBytes, _ := ioutil.ReadAll(resp.Body)

fmt.Println(string(bodyBytes))

} else {

fmt.Println(resp.StatusCode)

}

}

在上面的程序中,将发送HTTP请求的代码、设置超时时间的代码、获取HTTP响应状态码及响应内容的代码都写在了一个程序中,通过运行该程序,可以完整地看到如何使用 http.Client 发送定制化的HTTP请求并获取响应状态码及响应内容。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签