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]]

相关推荐
@东辰5 小时前
【golang-技巧】-自定义k8s-operator-by kubebuilder
开发语言·golang·kubernetes
@东辰6 小时前
【golang-技巧】- 定时任务 - cron
开发语言·golang·cron
jerry60912 小时前
7天用Go从零实现分布式缓存GeeCache(改进)(未完待续)
分布式·缓存·golang
杜杜的man13 小时前
【go从零单排】Closing Channels通道关闭、Range over Channels
开发语言·后端·golang
甘橘籽18 小时前
【RPC】 gRPC、pb基本使用--经验与总结
golang
杜杜的man18 小时前
【go从零单排】HTTP客户端和服务端
开发语言·http·golang
材料苦逼不会梦到计算机白富美19 小时前
golang分布式缓存项目 Day6 防止缓存击穿
分布式·缓存·golang
杜杜的man21 小时前
【go从零单排】Environment Variables环境变量
golang
材料苦逼不会梦到计算机白富美1 天前
golang HTTP基础
http·golang·iphone
友大冰1 天前
Go 语言已立足主流,编程语言排行榜24 年 11 月
开发语言·后端·golang