Go语言学习之 Day09 网络编程

目录

网络编程

  • TCP服务器/客户端开发
  • UDP服务器/客户端开发
  • 命令行聊天室

web开发

  • HTTP协议
  • web应用开发
  • 客户端开发

Web爬虫

  • HTML结构
  • Goquery

RPC

网络编程

image

image

image

image

image

net包提供了对socket编程的支持,socket编程分服务端和客户端编程,针对服务端可使用函数Listen创建监听服务,对于客户端可使用函数Dial连接服务器

常用函数

  • Listen: 用于创建监听服务器
  • ListenPacket:用于创建服务器端连接
  • Dial:用于创建与服务器连接
  • JoinHostPort:连接地址和端口
  • SplitHostort:分割地址和端口
  • LookupAddr:查找地址对应主机名
  • LookupHost: 根据主机名查看地址
  • ParseCIDR:解析CIDR格式IP

image

WEB开发

HTTP(HyperText Transfer Protocol, 超文本传输协议) 是访问互联网使用的核心通信协议,也是所有web应用程序使用的通信协议。

消息模型:客户端发送请求消息,服务器返回响应消息。传输层使用具有状态的TCP协议,但HTTP协议本身不具有状态

HTTP请求

HTTP请求消息分为消息头和消息主体(可选),消息头和消息主体用空白行分隔。实例:

image

HTTP请求说明:

1.消息头第一行由三个以空格分隔的元素组成,分别为HTTP方法、请求的URL和使用的HTTP版本
HTTP方法;
1). GET:用于获取资源,参数通过URL查下字符串方式提交给服务器,无消息主体
2). POST:用于执行操作,参数可以通过URL查下字符串方式和消息主体提交给服务
3). HEAD:用于检测资源是否存在,与GET类似,区别在于在响应消息中返回的消息主体为空
4). TRACE:用于诊断,可判断客户端和服务器之间是否存在代理服务器,原理:服务器在响应主体中返回收到的请求消息的具体内容
5). OPTIONS:用于要求服务器报告对某一资源有效的HTTP方法,服务器常返回Allow消息头的响应,并列出所有有效的方法 6). PUT:使用请求主体中的内容向服务器上传指定的资源
7). DELETE:用于删除资源
8). CONNECT:
请求URL:用于指定请求的资源名称以及查下参数
使用的HTTP版本:常用1.0和1.1版本,在1.1版本中请求消息中必须包含Host请求头

2.其他
Host:指定请求访问的主机名,当多个web站点部署在同一台主机上时需要使用Host消息头
User-Agent:指定客户端软件的信息,不如浏览器类型和版本、操作系统类型和版本等
Referer:表示发出请求的原始URL
Cookie:提交服务器想客户端发布的其他参数

HTTP 响应

HTTP响应消息分为消息头和消息主体(可选),消息头和消息主体用空白行分隔。实例:

image

HTTP响应说明:

1.消息头第一行由三个空格分开的元素组成,分别表示HTTP版本、请求状态码(数字)、请求状态描述
2.其他:
Server:旗标,指明使用的Web服务器软件
Set-Cookie:设置cookie信息,在随后向服务器发送的请求中由Cookie消息头返回
Content-Type:指定消息主体类型
Content-Length:指定消息主体的字节长度

应用开发

http包提供了HTTP服务器和客户端的开发接口,内置web服务器
针对web服务端开发流程为

  • 定义处理器/处理器函数
    接收用户数据
    返回信息
  • 启动web服务器

image

Request结构体


常用属性
	Method: 请求方式
	URL:请求的URL
	Proto:请求协议
	Header:请求头
	ContentLength:请求体字节数量
	Body:请求体流对象
	Form:获取提交的所有数据,需要手动调用ParseForm
	PostForm:获取所有body中提交的数据(application/x-www-form-urlencoded) ,需要手动调用ParseForm
	MultipartForm:获取所有body中提交的数据(multipart/form-dat) ,需要手动调用ParseMutipartForm
常用方法
	ParseForm:解析提交的数据(url&body[application/x-www-form-urlencode])
	FormValue:根据名称获取提交的数据,自动调用ParseForm
	PostFormValue:根据名称从body中获取提交的数据,自动调用ParseForm
	ParseMultipartForm:解析提交的数据(url*body[multipart/form-data])
	FormFile:根据名称从body中获取提交的文件数据流对象,自动调用ParseMutipartForm,ParseForm



image

静态文件服务器

image

image

客户端开发

发起Head请求
image

发起GET请求
image

发起POST请求

image

使用client发起原始请求
image

请求测试

day09/c3_web/p4_req/req_test.go
image

image

image

爬虫

按照一定规则自动的获取互联网上的信息(随着网络的迅速发展,互联网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战)

应用:
搜索引擎(Google、百度、Bing等搜索引擎,辅助人们检索信息)
股票软件(爬取股票数据,帮助人们分析决策,进行金融交易)
Web扫描(需要对网站所有的网页进行漏洞扫描)
获取某网站最新文章收藏
爬取天气预报
爬取漂亮mm照片
给空间朋友点赞
…

goquery

goquery包提供了发起HTTP请求并对返回结果HTML解析的功能
发起请求:goquery.NewDocument(url)
解析
查找元素:Find
查找子元素:ChildrenFiltered
获取内容:Text/Html
获取属性:Attr
遍历元素:Each
选择器
.class/#id/tag
复合选择器

RPC

RPC即远程过程调用(Remote Procedure Call),用于构建计算机之间的通信协议,该协议允许运行于一台计算机的程序调用另一台计算机上的程序,开发人员无需对交互过程进行编程
rpc和rpc/jsonrpc包提供了对RPC的支持

  • rpc构建于TCP或HTTP协议之上,底层数据编码使用gob,因gob编码为golang自定义,所以无法支持跨语言调用
  • rpc/jsonrpc构建于TCP协议之上,底层数据编码使用json,可支持跨语言调用

定义RPC结构体和方法

  • RPC结构体和方法必须为公开
  • 方法必须有两个参数和返回值error,第一个为参数为请求结构体变量指针,用于获取客户端提交的参数,第二个参数为响应结构体指针变量,用于结果返回,返回值error用于告知客户端错误信息

image

image

jsonrpc包常用函数

  • Dial:连接JSONPRC
  • ServeConn:处理客户端连接

image

image

posted @ 2023-01-23 08:59  元贞  阅读(35)  评论(0编辑  收藏  举报