GoWeb服务器之处理HTTP请求

本文详细介绍了如何在GoWeb服务器中处理HTTP请求,包括获取请求URL、请求头信息、请求体内容、请求参数,以及如何给客户端响应。通过实例展示了获取URL Path、RawQuery,读取Header,解析Form和PostForm字段,处理上传文件,以及发送字符串、HTML页面、JSON数据和重定向响应的方法。
摘要由CSDN通过智能技术生成

一、基本介绍

Go语言的net/http包提供了一系列用于表示HTTP报文的结构,我们可以使用它处理请求和发送相应,其中Request结构代表了客户端发送的请求报文,下面让我们看一下Request结构体
这里写图片描述
这里写图片描述
这里写图片描述

二、获取请求URL

Request结构中的URL字段用于表示请求行中包含的URL,改字段是一个指向url.URL结构的指针,让我们来看一下URL结构
这里写图片描述
1、Path字段
获取请求的URL
例如:http://localhost:8080/hello?username=admin&password=123456
通过r.URL.Path只能得到 /hello
2、 RawQuery字段
获取请求的URL后面?后面的查询字符串
例如:http://localhost:8080/hello?username=admin&password=123456
通过 r.URL.RawQuery 得到的是username=admin&password=123456
3、案例演示:

package utils

import (
    "fmt"
    "net/http"
)

func handlerURL(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "发送请求的请求地址是:", r.URL.Path)
    fmt.Fprintln(w, "发送请求的请求地址的查询字符串是:", r.URL.RawQuery)

}

func URLDemo() {
    http.HandleFunc("/url", handlerURL)
    http.ListenAndServe(":8080", nil)
}

三、获取请求头中的信息

通过Request结果中的Header字段用来获取请求头中的所有信息,Header字段的类型是Header类型,而Header类型是一个map[string][]string,string类型的key,string切片类型的值。下面是Header类型及它的方法:
这里写图片描述
这里写图片描述
1、获取请求头中的所有信息
r.Header
得到的结果如下:、

map[User-Agent:[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36] Accept:[text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8] Accept-Encoding:[gzip, deflate, br] Accept-Language:[zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7] Connection:[keep-alive] Upgrade-Insecure-Requests:[1]]

2、获取请求头中的某个具体属性的值,如获取Accept-Encoding的值
方式一:r.Header[“Accept-Encoding”]
i. 得到的是一个字符串切片
ii. 结果

[gzip, deflate, br]

方式二:r.Header.Get(“Accept-Encoding”)
i. 得到的是字符串形式的值,多个值使用逗号分隔
ii. 结果

gzip, deflate, br

3、案例演示:

package utils


import (
    "fmt"
    "net/http"
)

func handlerHeader(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "发送请求的请求头信息:", r.Header)
    fmt.Fprintln(w, "请求头中Accept-Encoding的信息是:", r.Header["Accept-Encoding"])
    fmt.Fprintln(w, "请求头中Accept-Encoding的属性值是:", r.Header.Get("Accept-Encoding"))


}

func HeaderDemo() {
    http.HandleFunc("/header", handlerHeader)
    http.ListenAndServe(":8080", nil)
}

四、获取请求体中的信息

请求和响应的主体都是有Request结构中的Body字段表示,这个字段的类型是io.ReadCloser接口,该接口包含了Reader接口和Closer接口,Reader接口拥有Read方法,Closer接口拥有Close方法
这里写图片描述
这里写图片描述
这里写图片描述
1、 由于GET请求没有请求体,所以我们需要在HTML页面中创建一个form表单,通过指定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值