GoWeb获取请求

简介: GoWeb获取请求

获取请求

1.request结构体

       在net/http中定义了request的结构体,里面包含了请求的信息。这里联想到为什么我们在写处理器函数的时候必须带上两个参数,因为我们需要拿到请求的信息,并且做出反应。

       Request类型代表一个服务端接受到的或者客户端发送出去的HTTP请求

                             

Method(方法):表示请求的方法-->有Get,Post,Put,Delete  在项目开发中有不同的涵义

URL--->表示请求行中包含的URL,该字段是一个指向url.URL结构体的指针

一个URL地址:https://cn.bing.com/search?q=192.168.237.142

url.URL.Path:拿到/search

url.URL.RowQuery:拿到q=192.168.237.142(表单中的参数Get请求)

       为了更好的显示,建立使用谷歌浏览器,通过F12可以看到报文消息

       我们先准备一个html文件:

       

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>请求报文</title>
</head>
<body>
    <!--默认为GET请求,这里我们也指定下-->
    <form action="http://localhost:9090/hello">
        <!--注:name标签时我们向服务器端提交信息-->
        用户名:<input type="text" name="username">
        密码:<input type="password" name="password">
        <!--注:默认为提交按钮  我们这里也指定下-->
        <button type="submit">提交</button>
    </form>
</body>
</html>

获取请求头

  URL中的Header

type Header map[string][]string

  Header是一个map:

  map取值:  v , ok = map[key]

   Headr给我们绑定了一个方法:

那么怎么知道请求头中有哪些key呢,在你的页面,按F12-->NetWork-->点击左下边相应的文件

获取请求体(Get请求没有请求体)

准备工作:修改html文件

官方文档:

注:请求体中的内容只能读取一次

       io-->io流-->管道-->队列

方法1:先获取请求体中的长度-->定义一个byte切片-->读取请求体

     

方法2(建议使用):

PostForm本质上是一个map

  //获取请求体中的内容 2种方法
  //方法1   先获取请求体中的长度-->定义一个byte切片-->读取请求体
  len := r.ContentLength
  data := make([]byte, len)
  r.Body.Read(data)
  fmt.Fprintf(w, "请求体中的内容%v\n", string(data))
  //方法2   解析表单-->获取表单中的内容
  r.ParseForm()
  fmt.Fprintf(w, "表单中的内容%v\n", r.PostForm)

注:ParseForm字段只支持application/x-www-form-urlencoded编码

     在form表单的默认编码是application/x-www-form-urlencoded。

     当form中的enctype的属性值为multipart/form-data,使用PostForm字段无法获取表单中的数据

form表单的enctype属性的默认值是application/x-www-form-urlencoded编码
实现上传文件时需要将该属性设置为  multipart/form-data

     此时:需要使用MultipartForm字段,不能再使用ParseForm

     

        用法与上面相同,不做案例了

方法3:

       =>通过func (*Request) FormValue和 func (*Request) PostFormValue

           快速获取表单信息

       ==>与MultipartForm配套的

     

      FormValue、PostFormValue

        内部调用了PareForm(在有必要时)

       区别:FormValue优先获取URL上的内容

       

//方法3  通过func (*Request) FormValue | PostFormValue
fmt.Fprintf(w, "通过FormValue:%v\n", r.FormValue("user"))
fmt.Fprintf(w, "PostFormValue:%v\n", r.PostFormValue("username"))

       

 

 

 

相关文章
|
缓存
POST 为什么会发送两次请求?
POST 为什么会发送两次请求?
877 0
|
2月前
|
缓存 安全 数据安全/隐私保护
如何根据请求场景选择 GET 或 POST 请求方法?
【10月更文挑战第27天】根据不同的请求场景,综合考虑数据传输目的、安全性、数据量大小、幂等性要求以及缓存需求等因素,合理地选择GET或POST请求方法,能够更好地实现客户端与服务器之间的数据交互,提高系统的性能和安全性。
159 64
|
4月前
|
JSON 安全 前端开发
post为什么会发送两次请求?
post为什么会发送两次请求?
219 69
|
5月前
|
JSON 安全 程序员
为什么POST请求会发送两次请求?
为什么POST请求会发送两次请求?
157 0
|
7月前
|
XML 安全 前端开发
post为什么会发送两次请求详解
【6月更文挑战第5天】在Web开发中,开发者可能会遇到POST请求被发送了两次的情况,
219 0
|
小程序
小程序接口请求配置
小程序接口请求配置
184 0
Axios 权限请求 一次只能发送一个请求
Axios 权限请求 一次只能发送一个请求
|
存储 负载均衡 JavaScript
一个请求过来都经过了什么
我面试人家的时候特别喜欢问一个问题:”请描述一下一个请求过来到响应完成都做了什么,越详细越好。” 对于一个高手来说,他只要回答好了这一个问题,技术面试就通过了。所以如果我要去面试,我就把这个问题的答案压缩到40分钟到1个小时。因为一般的技术面试都是这个时间段哒,虽然我其实很想讲上两天。哎,一看我们部门就是做业务的。 为了让人家听懂,我一般会设置一个业务场景。比如说:现在用户要开始上传一个视频。那么业务上要经过用户打开浏览器页面,用户点击[选择视频文件]按钮,JS端调用系统本地文件选择器,JS端将视频信息写入到浏览器页面,用户点击[开始上传],此时开始发送请求。
一个请求过来都经过了什么
如何判断请求是否发送成功以及获取请求中的数据
如何判断请求是否发送成功以及获取请求中的数据
768 0
如何判断请求是否发送成功以及获取请求中的数据