发布时间:2024-12-23 00:52:59
下面是一个简单的例子,展示了如何创建一个基本的HTTP客户端:
```go import ( "net/http" "fmt" ) func main() { client := http.Client{} response, err := client.Get("https://api.example.com/data") if err != nil { fmt.Println("Request failed:", err) return } defer response.Body.Close() // 处理响应 // ... } ``` 在这个例子中,我们使用了Get方法来发送一个GET请求,并指定了目标URL。发送请求后,我们需要及时关闭响应体,以避免资源泄漏。以下代码展示了如何读取响应体的内容:
```go import ( "net/http" "io/ioutil" "fmt" ) func main() { client := http.Client{} response, err := client.Get("https://api.example.com/data") if err != nil { fmt.Println("Request failed:", err) return } defer response.Body.Close() body, err := ioutil.ReadAll(response.Body) if err != nil { fmt.Println("Failed to read response body:", err) return } fmt.Println("Response body:", string(body)) } ``` 在这个例子中,我们使用了ioutil包中的ReadAll函数来读取响应体的内容。这个函数会接收一个io.Reader作为输入,并将其读取到一个字节数组中。以下是一个简单的例子,展示了如何处理HTTP请求过程中可能出现的错误:
```go import ( "net/http" "fmt" ) func main() { client := http.Client{} response, err := client.Get("https://api.example.com/data") if err != nil { fmt.Println("Request failed:", err) return } defer response.Body.Close() // 处理响应 // ... if response.StatusCode != http.StatusOK { fmt.Println("Request failed with status code:", response.StatusCode) return } // 进一步处理响应 // ... } ``` 在这个例子中,我们检查了响应的状态码。如果状态码不是200 OK,我们就可以根据具体的情况采取相应的操作。以下是一个简单的例子,展示了如何设置和获取HTTP头信息:
```go import ( "net/http" "fmt" ) func main() { client := http.Client{} request, err := http.NewRequest("GET", "https://api.example.com/data", nil) if err != nil { fmt.Println("Failed to create request:", err) return } // 设置请求头信息 request.Header.Set("Content-Type", "application/json") // 发送请求 response, err := client.Do(request) if err != nil { fmt.Println("Request failed:", err) return } defer response.Body.Close() // 获取响应头信息 contentLength := response.Header.Get("Content-Length") fmt.Println("Content length:", contentLength) // 处理响应 // ... } ``` 在这个例子中,我们使用http.NewRequest方法创建一个GET请求,并使用request.Header.Set方法设置了"Content-Type"为"application/json"。在发送请求后,我们使用response.Header.Get方法获取了响应头中"Content-Length"的值。引用:
- [Golang官方文档 - net/http](https://golang.org/pkg/net/http/) - [《Learning Go》 by Jon Bodner](https://www.oreilly.com/library/view/learning-go/9781492077206/)