Golang_web_获取请求

编程入门 行业动态 更新时间:2024-10-11 07:34:47

Golang_web_获取请求

Golang_web_获取请求

Golang

文章目录

  • Golang
    • 1.获取请求 URL
    • 2.获取请求头中的信息
    • 3.获取请求体中的信息
    • 4.获取请求参数
      • 4.1 Form 字段
      • 4.2 PostForm 字段
      • 4.3 MultipartForm

1.获取请求 URL

Request 结构中的 URL 字段用于表示请求行中包含的 URL,改字段是一个指向url.URL 结构的指针,让我们来看一下 URL 结构

main.go

package main
import ("fmt""net/http"
)
//创建处理器函数
func handler(w http.ResponseWriter, r *http.Request){fmt.Fprintln(w,"您输入的地址:",r.URL.Path)fmt.Fprintln(w,"字符串:",r.URL.RawQuery)
}
func main() {http.HandleFunc("/hello", handler)http.ListenAndServe(":8080", nil)
}



2.获取请求头中的信息

通过 Request 结果中的 Header 字段用来获取请求头中的所有信息,Header 字段的类型是 Header 类型,而 Header 类型是一个 map[string][]string,string 类型的 key,string 切片类型的值。下面是 Header 类型及它的方法:


main.go

package main
import ("fmt""net/http"
)
//创建处理器函数
func handler(w http.ResponseWriter, r *http.Request){fmt.Fprintln(w,"您输入的地址:",r.URL.Path)fmt.Fprintln(w,"字符串:",r.URL.RawQuery)fmt.Fprintln(w,"头部信息全部为",r.Header)//获取头部信息fmt.Fprintln(w,"头部信息中[Accept]的信息为:",r.Header["Accept"])
}
func main() {http.HandleFunc("/hello", handler)http.ListenAndServe(":8080", nil)
}


Get方法和[]的方法的区别

上面的为[]的方法,下面的为Get方法

3.获取请求体中的信息

请求和响应的主体都是有 Request 结构中的 Body 字段表示,这个字段的类型是io.ReadCloser 接口,该接口包含了 Reader 接口和 Closer 接口,Reader 接口拥有 Read方法,Closer 接口拥有 Close 方法

index.html

<html><head><meta charset="UTF-8"></head><body><form action="http://localhost:8080/hello" method="POST">用户名: <input type="text" name="username" value="hanzong"><br/>密 码 : <input type="password" name="password" value="666666"><br/><input type="submit"></form></body></html>

main.go

package main
import ("fmt""net/http"
)
//创建处理器函数
func handler(w http.ResponseWriter, r *http.Request){fmt.Fprintln(w,"您输入的地址:",r.URL.Path)fmt.Fprintln(w,"字符串:",r.URL.RawQuery)fmt.Fprintln(w,"头部信息全部为",r.Header)fmt.Fprintln(w,"头部信息中[Accept]的信息为:",r.Header["Accept"])fmt.Fprintln(w,"头部信息中[Accept]的get信息为:",r.Header.Get("Accept"))
//获取内容的长度length := r.ContentLength
//创建一个字节切片body := make([]byte, length)
//读取请求体r.Body.Read(body)fmt.Fprintln(w, "请求体中的内容是:", string(body))
}
func main() {http.HandleFunc("/hello", handler)http.ListenAndServe(":8080", nil)
}



提交之后

4.获取请求参数

下面我们就通过 net/http 库中的 Request 结构的字段以及方法获取请求 URL 后面的请求参数以及 form 表单中提交的请求参数

4.1 Form 字段

类型是 url.Values 类型,Form 是解析好的表单数据,包括 URL 字段的 query参数和 POST 或 PUT 的表单数据。

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

获取username和password

函数

func handler(w http.ResponseWriter, r *http.Request) {//解析表单r.ParseForm()//获取请求参数fmt.Fprintln(w, "请求参数为:", r.Form) 
}

需要在index.html加上如下的admin和pwd才可以在页面上显示出来password和username

4.2 PostForm 字段

类型也是 url.Values 类型,用来获取表单中的请求参数

func handler(w http.ResponseWriter, r *http.Request) {
//解析表单
r.ParseForm()
//获取请求参数
fmt.Fprintln(w, "请求参数为:", r.PostForm) }

结果

请求参数为: map[username:[hanzong] password:[666666]]

但是 PostForm 字段只支持 application/x-www-form-urlencoded 编码,如果form 表单的 enctype 属性值为 multipart/form-data,那么使用 PostForm 字段无法获取表单中的数据,此时需要使用 MultipartForm 字段

4.3 MultipartForm

为了取得 multipart/form-data 编码的表单数据,我们需要用到 Request 结构的ParseMultipartForm 方法和 MultipartForm 字段,我们通常上传文件时会将 form 表单的enctype 属性值设置为 multipart/form-data

表单

<form action="http://localhost:8080/upload" method="POST" enctype="multipart/form-data">用 户 名 : <input type="text" name="username" value="hanzong"><br/>文件:<input type="file" name="photo" /><br/><input type="submit"></form>

后台处理请求代码


package main
import ("fmt""net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {//解析表单r.ParseMultipartForm(1024)//打印表单数据fmt.Fprintln(w, r.MultipartForm)
}
func main() {http.HandleFunc("/upload", handler)http.ListenAndServe(":8080", nil)
}

浏览器显示结果

&{map[username:[hanzong]] map[photo:[0xc042126000]]}

更多推荐

Golang_web_获取请求

本文发布于:2023-07-28 19:16:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1284836.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!