欢迎大家到我的博客浏览。go的HTTP网络编程 | YinKai's Blog
go的HTTP网络编程
1、http编程—server示例
package main
import (
"fmt"
"net/http"
)
func main() {
// 注册处理函数,定义 URL 路由和对应的处理函数
http.HandleFunc("/", Hello) // 根路径 "/" 的请求交给 Hello 函数处理
http.HandleFunc("/login", Login) // "/login" 路径的请求交给 Login 函数处理
// 启动 HTTP 服务器,监听指定的地址和端口
err := http.ListenAndServe("0.0.0.0:8080", nil) // 启动服务器,监听地址 "0.0.0.0:8080",使用默认的路由器和处理器
if err != nil {
fmt.Println("HTTP 服务器启动失败", err)
}
}
func Hello(w http.ResponseWriter, r *http.Request) {
// 处理根路径 "/" 的请求
fmt.Fprintf(w, "Hello, World!") // 将 "Hello, World!" 写入 http.ResponseWriter,作为 HTTP 响应的内容
}
func Login(w http.ResponseWriter, r *http.Request) {
// 处理 "/login" 路径的请求
fmt.Fprintf(w, "Login page") // 将 "Login page" 写入 http.ResponseWriter,作为 HTTP 响应的内容
}
示例说明:
http.HandleFunc("/", Hello)
:注册处理函数Hello
,将根路径 “/” 的请求交给Hello
函数处理。
http.HandleFunc("/login", Login)
:注册处理函数Login
,将 “/login” 路径的请求交给Login
函数处理。
http.ListenAndServe("0.0.0.0:8080", nil)
:启动一个 HTTP 服务器,监听地址为 “0.0.0.0:8080″,传入nil
作为处理器,表示使用默认的路由器和处理器。
Hello
函数和Login
函数分别是处理根路径和 “/login” 路径请求的处理函数,它们接收一个http.ResponseWriter
和一个http.Request
参数,分别用于写入响应和读取请求信息。
fmt.Fprintf(w, ...)
:使用Fprintf
函数将字符串写入到http.ResponseWriter
中,作为 HTTP 响应的内容。
2、http编程–Client示例
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
// 创建一个 HTTP 客户端
client := http.Client{}
// 构建 GET 请求
req, err := http.NewRequest("GET", "https://www.example.com", nil)
if err != nil {
fmt.Println("创建请求失败", err)
return
}
// 发送请求
res, err := client.Do(req)
if err != nil {
fmt.Println("请求失败", err)
return
}
defer res.Body.Close() // 在函数结束时关闭响应的 Body
// 读取响应的内容
data, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println("读取响应失败", err)
return
}
// 输出响应的内容
fmt.Println(string(data))
}
示例说明:
3、常见HTTP请求方法
GET:从服务器获取资源。客户端向服务器请求获取指定 URL 对应的资源,并从服务器返回该资源的内容。GET 请求通常用于获取数据,而不对服务器上的资源进行修改。
POST:向服务器提交数据。客户端向服务器提交数据,请求服务器对该数据进行处理。POST 请求通常用于向服务器提交数据,如表单数据、上传文件等。
PUT:更新服务器上的资源。客户端向服务器传送数据,请求服务器更新指定 URL 对应的资源。PUT 请求通常用于更新资源。
HEAD:类似于 GET 请求,但只返回响应头部,不返回响应体。用于获取资源的元信息,如文件大小、文件类型等,而不获取实际的资源内容。
OPTIONS:请求服务器返回对指定 URL 支持的通信选项。服务器将返回支持的 HTTP 请求方法、头部字段等信息,用于客户端了解服务器的功能和约束。
4、下面是一个简单的 Go 语言程序,演示了如何使用 HTTP 请求方法进行基本的 HTTP 请求:
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
// GET 请求示例
resp, err := http.Get("https://jsonplaceholder.typicode.com/posts/1") // 发起 GET 请求
if err != nil {
fmt.Println("GET 请求错误:", err)
return
}
defer resp.Body.Close() // 确保在函数退出前关闭响应体
data, err := ioutil.ReadAll(resp.Body) // 读取响应体数据
if err != nil {
fmt.Println("读取响应数据错误:", err)
return
}
fmt.Println("GET 请求响应数据:", string(data)) // 打印响应数据
// POST 请求示例
resp, err = http.Post("https://jsonplaceholder.typicode.com/posts", "application/json", nil) // 发起 POST 请求
if err != nil {
fmt.Println("POST 请求错误:", err)
return
}
defer resp.Body.Close()
data, err = ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取响应数据错误:", err)
return
}
fmt.Println("POST 请求响应数据:", string(data))
// PUT 请求示例
req, err := http.NewRequest("PUT", "https://jsonplaceholder.typicode.com/posts/1", nil) // 创建 PUT 请求
if err != nil {
fmt.Println("创建 PUT 请求错误:", err)
return
}
client := &http.Client{}
resp, err = client.Do(req) // 发起 PUT 请求
if err != nil {
fmt.Println("PUT 请求错误:", err)
return
}
defer resp.Body.Close()
data, err = ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取响应数据错误:", err)
return
}
fmt.Println("PUT 请求响应数据:", string(data))
// DELETE 请求示例
req, err = http.NewRequest("DELETE", "https://jsonplaceholder.typicode.com/posts/1", nil) // 创建 DELETE 请求
if err != nil {
fmt.Println("创建 DELETE 请求错误:", err)
return
}
resp, err = client.Do(req) // 发起 DELETE 请求
if err != nil {
fmt.Println("DELETE 请求错误:", err)
return
}
defer resp.Body.Close()
data, err = ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取响应数据错误:", err)
return
}
fmt.Println("DELETE 请求响应数据:", string(data))
}
原文地址:https://blog.csdn.net/m0_62264224/article/details/134633925
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_19361.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!