go语言net包里面的PostForm

net包里面的http包里定义了Request结构体,用于http的请求,

type Request

type Request struct {

// Method指定HTTP方法(GET、POST、PUT等)。对客户端,""代表GET。

Method string

// URL在服务端表示被请求的URI,在客户端表示要访问的URL。

//

// 在服务端,URL字段是解析请求行的URI(保存在RequestURI字段)得到的,

// 对大多数请求来说,除了Path和RawQuery之外的字段都是空字符串。

// (参见RFC 2616, Section 5.1.2)

//

// 在客户端,URL的Host字段指定了要连接的服务器,

// 而Request的Host字段(可选地)指定要发送的HTTP请求的Host头的值。

URL *url.URL

// 接收到的请求的协议版本。本包生产的Request总是使用HTTP/1.1

Proto string // "HTTP/1.0"

ProtoMajor int // 1

ProtoMinor int // 0

// Header字段用来表示HTTP请求的头域。如果头域(多行键值对格式)为:

// accept-encoding: gzip, deflate

// Accept-Language: en-us

// Connection: keep-alive

// 则:

// Header = map[string][]string{

// "Accept-Encoding": {"gzip, deflate"},

// "Accept-Language": {"en-us"},

// "Connection": {"keep-alive"},

// }

// HTTP规定头域的键名(头名)是大小写敏感的,请求的解析器通过规范化头域的键名来实现这点。

// 在客户端的请求,可能会被自动添加或重写Header中的特定的头,参见Request.Write方法。

Header Header

// Body是请求的主体。

//

// 在客户端,如果Body是nil表示该请求没有主体买入GET请求。

// Client的Transport字段会负责调用Body的Close方法。

//

// 在服务端,Body字段总是非nil的;但在没有主体时,读取Body会立刻返回EOF。

// Server会关闭请求的主体,ServeHTTP处理器不需要关闭Body字段。

Body io.ReadCloser

// ContentLength记录相关内容的长度。

// 如果为-1,表示长度未知,如果>=0,表示可以从Body字段读取ContentLength字节数据。

// 在客户端,如果Body非nil而该字段为0,表示不知道Body的长度。

ContentLength int64

// TransferEncoding按从最外到最里的顺序列出传输编码,空切片表示"identity"编码。

// 本字段一般会被忽略。当发送或接受请求时,会自动添加或移除"chunked"传输编码。

TransferEncoding []string

// Close在服务端指定是否在回复请求后关闭连接,在客户端指定是否在发送请求后关闭连接。

Close bool

// 在服务端,Host指定URL会在其上寻找资源的主机。

// 根据RFC 2616,该值可以是Host头的值,或者URL自身提供的主机名。

// Host的格式可以是"host:port"。

//

// 在客户端,请求的Host字段(可选地)用来重写请求的Host头。

// 如过该字段为"",Request.Write方法会使用URL字段的Host。

Host string

// Form是解析好的表单数据,包括URL字段的query参数和POST或PUT的表单数据。

// 本字段只有在调用ParseForm后才有效。在客户端,会忽略请求中的本字段而使用Body替代。

Form url.Values

// PostForm是解析好的POST或PUT的表单数据。

// 本字段只有在调用ParseForm后才有效。在客户端,会忽略请求中的本字段而使用Body替代。

PostForm url.Values

// MultipartForm是解析好的多部件表单,包括上传的文件。

// 本字段只有在调用ParseMultipartForm后才有效。

// 在客户端,会忽略请求中的本字段而使用Body替代。

MultipartForm *multipart.Form

// Trailer指定了会在请求主体之后发送的额外的头域。

//

// 在服务端,Trailer字段必须初始化为只有trailer键,所有键都对应nil值。

// (客户端会声明哪些trailer会发送)

// 在处理器从Body读取时,不能使用本字段。

// 在从Body的读取返回EOF后,Trailer字段会被更新完毕并包含非nil的值。

// (如果客户端发送了这些键值对),此时才可以访问本字段。

//

// 在客户端,Trail必须初始化为一个包含将要发送的键值对的映射。(值可以是nil或其终值)

// ContentLength字段必须是0或-1,以启用"chunked"传输编码发送请求。

// 在开始发送请求后,Trailer可以在读取请求主体期间被修改,

// 一旦请求主体返回EOF,调用者就不可再修改Trailer。

//

// 很少有HTTP客户端、服务端或代理支持HTTP trailer。

Trailer Header

// RemoteAddr允许HTTP服务器和其他软件记录该请求的来源地址,一般用于日志。

// 本字段不是ReadRequest函数填写的,也没有定义格式。

// 本包的HTTP服务器会在调用处理器之前设置RemoteAddr为"IP:port"格式的地址。

// 客户端会忽略请求中的RemoteAddr字段。

RemoteAddr string

// RequestURI是被客户端发送到服务端的请求的请求行中未修改的请求URI

// (参见RFC 2616, Section 5.1)

// 一般应使用URI字段,在客户端设置请求的本字段会导致错误。

RequestURI string

// TLS字段允许HTTP服务器和其他软件记录接收到该请求的TLS连接的信息

// 本字段不是ReadRequest函数填写的。

// 对启用了TLS的连接,本包的HTTP服务器会在调用处理器之前设置TLS字段,否则将设TLS为nil。

// 客户端会忽略请求中的TLS字段。

TLS *tls.ConnectionState

}

其中,

// PostForm是解析好的POST或PUT的表单数据。

// 本字段只有在调用ParseForm后才有效。在客户端,会忽略请求中的本字段而使用Body替代。

PostForm url.Values

PostForm字段是比较常用来解析请求参数的字段,它里面直接是解析好的POST或PUT表单数据,类型为 url.Values,定义如下:

type Values

type Values map[string][]string

一个PostForm的示例如下:

PostForm: map[distance:[7587] djCityId:[131] djV:[7.8.0] endAddr:[北京市昌平区龙禧苑云趣园二区] endCityId:[131] endLat:[4851213] endLng:[12950791] endName:[云趣园-二区] sign:[86a81f65253b435f3ee71695ba202fc5] startAddr:[百度大厦] startCityId:[131] startLat:[4846572] startLng:[12947473] startName:[百度大厦] time:[988]]

相关推荐
西京刀客29 分钟前
go语言-切片排序之sort.Slice 和 sort.SliceStable 的区别(数据库分页、内存分页场景注意点)
后端·golang·sort·数据库分页·内存分页
黄昏单车2 小时前
golang语言基础到进阶学习笔记
笔记·golang·go
moxiaoran575311 小时前
Go语言结构体
开发语言·后端·golang
Tony Bai19 小时前
Cloudflare 2025 年度报告发布——Go 语言再次“屠榜”API 领域,AI 流量激增!
开发语言·人工智能·后端·golang
小徐Chao努力1 天前
Go语言核心知识点底层原理教程【变量、类型与常量】
开发语言·后端·golang
锥锋骚年1 天前
go语言异常处理方案
开发语言·后端·golang
moxiaoran57531 天前
Go语言的map
开发语言·后端·golang
小信啊啊1 天前
Go语言数组
开发语言·后端·golang
IT艺术家-rookie1 天前
golang-- sync.WaitGroup 和 errgroup.Group 详解
开发语言·后端·golang
树下水月1 天前
Go语言编码规范
开发语言·后端·golang