我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Golang实现HTTP编程请求和响应

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Golang实现HTTP编程请求和响应

请求:

HTTP 请求报文由请求行、请求头部、空行、请求包体4个部分组成,如下图所示:

请求行:

请求行由方法字段、URL 字段 和HTTP 协议版本字段 3个部分组成,他们之间使用空格隔开。常用的 HTTP 请求方法有 GET、POST。

GET:

  • 当客户端要从服务器中读取某个资源时,使用GET 方法。GET 方法要求服务器将URL 定位的资源放在响应报文的数据部分,回送给客户端,即向服务器请求某个资源。
  • 使用GET方法时,请求参数和对应的值附加在 URL 后面,利用一个问号(“?”)代表URL 的结尾与请求参数的开始,传递参数长度受限制,因此GET方法不适合用于上传数据。
  • 通过GET方法来获取网页时,参数会显示在浏览器地址栏上,因此保密性很差。

POST:

  • 当客户端给服务器提供信息较多时可以使用POST 方法,POST 方法向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。
  • GET 一般用于获取/查询资源信息,POST 会附带用户数据,一般用于更新资源信息。POST 方法将请求参数封装在HTTP 请求数据中,而且长度没有限制,因为POST携带的数据,在HTTP的请求正文中,以名称/值的形式出现,可以传输大量数据。

请求头:

请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

请求头含义
User-Agent请求的浏览器类型
Accept客户端可识别的响应内容类型列表,星号“ * ”用于按范围将类型分组,用“ / ”指示可接受全部类型,用“ type http.HandleFunc("/itzhuzhu", myHandlerFunc) http.ListenAndServe("127.0.0.1:8000", nil) } func myHandlerFunc(w http.ResponseWriter, r *http.Request) { w.Write([]byte("ResponseWriter Test")) fmt.Println("Header:", r.Header) fmt.Println("URL:", r.URL) fmt.Println("Method:", r.Method) fmt.Println("Host:", r.Host) fmt.Println("RemoteAddr:", r.RemoteAddr) fmt.Println("Body:", r.Body) }

HTTP客户端实现:

客户端模拟浏览器发送请求:

package main

import (
	"fmt"
	"net"
	"os"
)

func main() {
	// 客户端连接服务器
	dial, err := net.Dial("tcp", "127.0.0.1:8000")
	errFunction("net.Dial err:", err)
	defer dial.Close()

	// 模拟浏览器
	requstHttpHeader := "GET /itzhuzhu HTTP/1.1\r\nHost:127.0.0.1:8000\r\n\r\n"

	// 给服务器发送请求报文
	dial.Write([]byte(requstHttpHeader))

	buf := make([]byte, 1024)

	// 读取服务器的回复
	read, err := dial.Read(buf)
	errFunction("dial.Read err:", err)
	fmt.Println( string(buf[:read]))
}

func errFunction(describe string, err error) {
	if err != nil {
		fmt.Println(describe, err)
		os.Exit(1)
	}
}

服务器发送的响应包体被保存在Body中。可以使用它提供的Read方法来获取数据内容。保存至切片缓冲区中,拼接成一个完整的字符串来查看。
结束的时候,需要调用Body中的Close()方法关闭io。

package main

import (
	"fmt"
	"net/http"
)

func main()  {
	// 使用Get方法获取服务器响应包数据
	resp, err := http.Get("http://www.baidu.com")
	if err != nil {
		fmt.Println("Get err:", err)
		return
	}
	defer resp.Body.Close()

	// 获取服务器端读到的数据
	fmt.Println("Status = ", resp.Status)           // 状态
	fmt.Println("StatusCode = ", resp.StatusCode)   // 状态码
	fmt.Println("Header = ", resp.Header)           // 响应头部
	fmt.Println("Body = ", resp.Body)               // 响应包体

	buf := make([]byte, 4096)         // 定义切片缓冲区,存读到的内容
	var result string
	// 获取服务器发送的数据包内容
	for {
		n, err := resp.Body.Read(buf)  // 读body中的内容。
		if n == 0 {
			fmt.Println("Body.Read err:", err)
			break
		}
		result += string(buf[:n])     // 累加读到的数据内容
	}
	// 打印从body中读到的所有内容
	fmt.Println("result = ", result)
}

到此这篇关于Golang实现HTTP编程请求和响应的文章就介绍到这了,更多相关Golang HTTP编程请求和响应内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Golang实现HTTP编程请求和响应

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Netty4之如何实现HTTP请求、响应

这篇文章主要介绍了Netty4之如何实现HTTP请求、响应问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-14

Netty4之怎么实现HTTP请求、响应

本文小编为大家详细介绍“Netty4之怎么实现HTTP请求、响应”,内容详细,步骤清晰,细节处理妥当,希望这篇“Netty4之怎么实现HTTP请求、响应”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.Netty
2023-07-05

如何使用golang中的net/http/httptest.NewRecorder函数模拟HTTP请求和响应

如何使用golang中的net/http/httptest.NewRecorder函数模拟HTTP请求和响应在开发和测试Web应用程序时,经常需要模拟HTTP请求和响应。Golang提供了net/http/httptest包来方便地模拟HT
如何使用golang中的net/http/httptest.NewRecorder函数模拟HTTP请求和响应
2023-11-18

HTTP请求报文和响应报文是什么

这篇文章主要介绍了HTTP请求报文和响应报文是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇HTTP请求报文和响应报文是什么文章都会有所收获,下面我们一起来看看吧。HTTP报文是面向文本的,报文中的每一个字
2023-06-27

Android HTTP发送请求和接收响应的实例代码

添加权限 首先要在manifest中加上访问网络的权限: 代码如下: ... <
2022-06-06

JavaScript使用AOP编程思想实现监听HTTP请求

摘要:本文介绍了如何使用AOP编程思想在JavaScript中监听HTTP请求。AOP实现基于代理和拦截器,允许在请求执行前或后插入自定义代码。代理封装目标对象,拦截器应用于代理以执行自定义功能。该方法提供模块化和可扩展性,使开发人员能够创建自定义拦截器,用于身份验证、日志记录、错误处理和性能监控。这种方法增强了应用程序的安全性、可观察性和性能。
JavaScript使用AOP编程思想实现监听HTTP请求
2024-04-02

HTTP协议常用的请求头和响应头响应详解说明(学习)

HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。HTTP的头信息包括通用头、请求头、响应头和实体头四个部分。通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。
2023-02-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录