欢迎大家到我的博客浏览。go的HTTP网络编程 | YinKai's Blog

go的HTTP网络编程

1、http编程server示例

package mainimport (
    "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 响应内容
}
​

示例说明

2、http编程–Client示例

package mainimport (
    "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请求方法

  1. GET:从服务器获取资源客户端服务器请求获取指定 URL 对应的资源,并从服务器返回该资源的内容。GET 请求通常用于获取数据,而不对服务器上的资源进行修改

  2. POST:向服务器提交数据客户端服务器提交数据,请求服务器对该数据进行处理。POST 请求通常用于向服务提交数据,如表单数据上传文件等。

  3. PUT:更新服务器上的资源。客户端服务器传送数据,请求服务更新指定 URL 对应的资源。PUT 请求通常用于更新资源。

  4. DELETE:删除服务器上的资源。客户端服务器请求删除指定 URL 对应的资源。DELETE 请求通常用于删除资源。

  5. HEAD:类似于 GET 请求,但只返回响应头部,不返回响应体。用于获取资源的元信息,如文件大小文件类型等,而不获取实际的资源内容。

  6. OPTIONS:请求服务器返回对指定 URL 支持通信选项。服务器将返回支持的 HTTP 请求方法头部字段信息,用于客户端了解服务器的功能约束

  7. PATCH:对服务器上的资源进行部分更新客户端向服务器传送数据,请求服务器对指定 URL 对应的资源进行部分更新

  8. CONNECT:建立网络隧道。通常用于代理服务器,用于在客户端目标服务器之间建立隧道,用于安全加密通信

  9. TRACE:用于调试,请求服务器返回对请求和响应的诊断信息。不常用于实际生产环境

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进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注