IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Go HTTP客户端 -> 正文阅读

[网络协议]Go HTTP客户端


客户端的三个主要方法 Get, Post, PostTForm

Get方法

语法http.Get(url string) (resp *http.Response, err error)

  • 返回一个*http.Response, resp.Body实现了io.Reader 接口, 因此可以用ioutil.ReadAll() 读出到一个缓冲区。或者用io.Copy()输出到io.Writer

客户端基本交互:请求一个网页的过程如下

func Req(url string) {
	// 发出请求
	resp, err := http.Get(url)
	checkerr(err)
    defer resp.Body.close() // 随时必须记住close
}
func checkerr(err error) {
	if err != nil {
		fmt.Fprintf(os.Stderr, "%v\n", err) // 输出error到标准输出
		os.Exit(1)                          //一旦遇到错误立即退出程序
	}
}

Post方法

POST方法上传

语法:

Post(url string, contentType string, body io.Reader) (resp *http.Response, err error)

contentType:数据类型

说明字符串的类型, 对应form表单的enctype属性

application/x-www-form-urlencoded (默认)不设置 enctype 属性的原生 form 表单提交方式。

multipart/form-data 上传文件时的数据提交方式,相当于 form 表单的 enctype 等于 multipart/form-data 。

application/json 用来告诉服务端消息主体是序列化后的 JSON 字符串。

text/xml

  • body:实现了io.Reader接口的数据。 如果是string数据, 可以使用 strings.NewReader()来转换类型

    示例:

    body := strings.NewReader("username=BigRainKing&age=99&password=1234")

    在Server接收到的数据就是:

    map[age:[99] password:[1234] username:[BigRainKing]]

示例

Client.go

func Req(url string) {
	body := strings.NewReader("username=BigRainKing&age=99&password=1234")
	resp, err := http.Post(url, "application/x-www-form-urlencoded", body)
	checkerr(err)
	defer resp.Body.Close()

	io.Copy(os.Stdout, resp.Body)
}

Server.go

func login(w http.ResponseWriter, r *http.Request) {
	if r.Method == "GET" {      
        //展现前端页面...
	} else {
		r.ParseForm() // 解析form表单数据
		fmt.Println(r.Form)
	}
}

客户端响应:

method: POST
map[age:[99] password:[1234] username:[BigRainKing]]

PostForm

语法

PostForm(url string, data url.Values) (resp *http.Response, err error)
  • url:需要加上 “http://” or “https://”
  • url.Values 类型的数据: 类型实际是Type Values map[string][]string

示例:

Client.go

func Req(url string) {
	data := map[string][]string{"username": {"BigRainKing", "papa"}, "password": {"123456"}, "gg": {"no"}}
	resp, err := http.PostForm(url, data)
	checkerr(err)
	defer resp.Body.Close()
}

func checkerr(err error) {
	if err != nil {
		fmt.Fprintf(os.Stderr, "%v\n", err) // 输出error到标准输出
		os.Exit(1)                          //一旦遇到错误立即退出程序
	}
}
func main() {
	Req("http://localhost:8080/login")
}

服务器输出:

method: POST
map[gg:[no] password:[123456] username:[BigRainKing papa]]

获取Response

// 获取Response响应体 : 直接将body输出到stdout
_, err = io.Copy(os.Stdout, resp.Body)
checkerr(err)
    
// 方法二:输出到缓冲区 使用ioutil.ReadAll()
b, er = ioutil.ReadAll(resp.Body)
fmt.Printf("%s\n", b) //格式化后输出:因为ReadAll返回的是数字切片

ioutil.ReadAll():

? ioutil.ReadAll(r io.Reader) ([]*byte*, *error*)

io.Copy()

? io.Copy(dst io.Writer, src io.Reader) (written *int64*, err *error*)

Reference

1.HTTP客户端
2. HTML:Form表单标签的Enctype属性的作用及应用示例介绍
3. 《W3Cschool》HTML 标签的 enctype 属性

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 16:05:04  更:2021-09-20 16:05:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:57:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码