当前位置: 首页 > news >正文

网站公司建设石家庄建设银行营业网点

网站公司建设,石家庄建设银行营业网点,网站开发有前途,公司网站建设征求意见表什么是request http消息分为request(请求) 和 response(响应) request:在go中是一个struct,代表了客户段发送的http请求,已可以通过request 的方法访问请求中的cookie、URL、User Agent&#xf…

什么是request

        http消息分为request(请求) 和 response(响应)

        request:在go中是一个struct,代表了客户段发送的http请求,已可以通过request 的方法访问请求中的cookie、URL、User Agent,查询字符串等信息。

Request Header

        请求和响应的headers是通过Header来描述的,它是一个map,用来表示Http Header里的Key-Value.

        获取Header

        request.Header:获取整个haeder的map信息

        request.Header["{key}"] :获取header中的指定key的value的切片

        request.Header.Get("{key}") :返回获取header中的指定key的value字符传,多个值以逗号分隔

import ("fmt""net/http"
)func main() {server := http.Server{Addr: "localhost:8080",}http.HandleFunc("/test", func(writer http.ResponseWriter, request *http.Request) {fmt.Println(request.Header)fmt.Println(request.Header["Accept-Encoding"])fmt.Println(request.Header.Get("Accept-Encoding"))})server.ListenAndServe()
}

处理请求参数

get请求处理

request.URL.RawQuery:获取参数字符串。
request.URL.Query():获取请求参数字符串对应的map[String][]String,值为切片的原因是key有可能重复。
request.URL.Query("{key}"):获取对应请求参数的第一个值。
package mainimport ("fmt""net/http"
)func main() {server := http.Server{Addr: "localhost:8080",}http.HandleFunc("/test", func(writer http.ResponseWriter, request *http.Request) {//request.URL.RawQuery:获取参数字符串query := request.URL.RawQueryfmt.Println(query)//request.URL.Query():获取请求参数字符串对应的map[String][]String,值为切片的原因是key有可能重复values := request.URL.Query()fmt.Println(values)//request.URL.Query("{key}"):获取对应请求参数的第一个值get := request.URL.Query().Get("name")fmt.Println(get)writer.Write([]byte("请求成功"))})server.ListenAndServe()
}

 

form表单请求处理

请求包含的内容

        html表单中的数据会以name-value对的形式,如果通过get请求,数据通过url的name-value来发送,如果post请求发送,数据内容放在post请求的body中,name-value数据格式可以通过表单的Content Type指定,也就是enctype

enctype的值如下:

  • application/x-www-form-urlencoded:默认值,表单数据编码到请求字符串里面,适用于文本请求
  • multipart/form-data:每一对name-value都会转换为MIME消息部分,每一部分都有自己的Content Type 和Content Disposition,适用大量数据,例如上传文件
  • text/plain:html5浏览器需要支持的内容

不同请求对应的处理

        Request允许我们从URL或/和Body中提取请求数据,先调用ParseForm 或者 parseMultipartForm 解析Request,然后在访问相应的Form、PostForm、MultipartForm获取数据

<html><title>测试表单请求</title><body><form action="http://localhost:8080/test?first_name=urlData" method="post" enctype="application/x-www-form-urlencoded"><input type="text" name="first_name" /><br /><input type="text" name="last_name" /><br /><input type="submit" value="提交"/></form></body>
</html>
package mainimport ("fmt""net/http"
)func main() {server := http.Server{Addr: "localhost:8080",}http.HandleFunc("/test", func(writer http.ResponseWriter, request *http.Request) {//先调用 request.ParseForm 解析request,再获取from数据-request.Form/request.PostFormrequest.ParseForm()fmt.Fprintln(writer, request.Form)fmt.Fprintln(writer, request.PostForm)})server.ListenAndServe()
}

 第二行比第一行返回中少了url中first_name的值

Form:request.Form,返回map格式的参数信息,如果url中有和表单中相同的key,表单数据在前,url中数据在后

PostForm: request.PostForm,只获取表单中的数据

MultipartForm:对应from表单中的enctype = multipart/form-data需要先调用parseMultipartForm解析请求,会返回一个struct,struct有两个map,第一个map是from表单中的数据,第二个map是上传的文件。

<html><title>测试表单请求</title><body><form action="http://localhost:8080/test?first_name=urlData" method="post" enctype="multipart/form-data"><input type="text" name="first_name" /><br /><input type="text" name="last_name" /><br /><input type="file" name="myFile"/><br /><input type="submit" value="提交"/></form></body>
</html>
package mainimport ("fmt""net/http"
)func main() {server := http.Server{Addr: "localhost:8080",}http.HandleFunc("/test", func(writer http.ResponseWriter, request *http.Request) {request.ParseMultipartForm(1024)fmt.Fprintln(writer, request.MultipartForm)})server.ListenAndServe()
}

FormValue:获取form字段中指定的key对应的第一个。
valuePostFormValue:获取form字段中指定的key对应的第一个value,只能获取到form表单中的值
FormValue 和 PostFormValue无需在调用parseForm/ ParseMultipartForm
package mainimport ("fmt""net/http"
)func main() {server := http.Server{Addr: "localhost:8080",}http.HandleFunc("/test", func(writer http.ResponseWriter, request *http.Request) {v1 := request.FormValue("first_name")v2 := request.FormValue("last_name")v3 := request.PostFormValue("first_name")v4 := request.PostFormValue("last_name")fmt.Println(v1)fmt.Println(v2)fmt.Println(v3)fmt.Println(v4)})server.ListenAndServe()
}

上传文件

       1.请求的enctype应为"multipart/form-data"

       2.解析request请求:request.ParseMultipartForm(1024)

        3.获取文件:request.MultipartForm.File["myFile"][0]:myFile对应请求的file的key,[0]获取第一个文件

<html><title>测试表单请求</title><body><form action="http://localhost:8080/test?first_name=urlData" method="post" enctype="multipart/form-data"><input type="text" name="first_name" /><br /><input type="text" name="last_name" /><br /><input type="file" name ="myFile"/><br /><input type="submit" value="提交"/></form></body>
</html>
package mainimport ("fmt""io/ioutil""net/http"
)func main() {server := http.Server{Addr: "localhost:8080",}http.HandleFunc("/test", func(writer http.ResponseWriter, request *http.Request) {request.ParseMultipartForm(1024)fileHeader := request.MultipartForm.File["myFile"][0]file, err := fileHeader.Open()if err == nil {data, err := ioutil.ReadAll(file)if err == nil {fmt.Println(string(data))}}})server.ListenAndServe()
}

Json请求

读取json

1.使用解码器:dec :=  json.NewDecoder(request.Body)

2.在解码器上进行解码:err := dec.Decode(&struct的实例)

写入json

使用编码器 enc := json.NewEncoder(writer)

编码:err = enc.Encode(struct的实例)

package mainimport ("encoding/json""fmt""net/http"
)func main() {server := http.Server{Addr: "localhost:8080",}http.HandleFunc("/test", func(writer http.ResponseWriter, request *http.Request) {// 读取json// 1.解码dec := json.NewDecoder(request.Body)// 1.转换为结构体company := Company{}err := dec.Decode(&company)//3.打印数据if err == nil {fmt.Println(company)}// 返回json//1.获取编码器enc := json.NewEncoder(writer)//2.对struct编码err = enc.Encode(company)if err == nil {//3.向请求输出jsonwriter.WriteHeader(http.StatusInternalServerError)return}})server.ListenAndServe()
}/*
创建和json结构一致的 struct
{"id":1,"name":"xiaoqiang","country":"China"}
*/
type Company struct {ID      int    `json:"id"`Name    string `json:"name"`Country string `json:"country"`
}

http://www.yayakq.cn/news/806372/

相关文章:

  • 一个主机可以做几个网站安徽津城建设工程有限公司网站
  • 手机模板网站生成制作软件怎么搭建个人网站电脑做服务器
  • 怎么做网站xml地图动态电商网站怎么做
  • 深圳三站合一网站建设建筑公司网站设计模板
  • 网站建设读书笔记温州 网站 公司
  • 学校加强网站建设买微单的网站建设
  • 广州网站注销备案公司网络推广怎么做
  • nas 可以做网站吗商标怎么设计才好看
  • 网站模板代码怎么写免费网站域名cn
  • 广告宣传页怎么制作公司搜索seo
  • 陕西交通建设集团西商分公司网站微信api接口
  • 建筑工程类网站齐齐哈尔做网站公司
  • 营销型网站的价格东莞常平牙科
  • 毕业设计网站建设英文文献微信开发人是谁
  • 湖北北京网站建设好的学习网站打广告
  • 行业门户网站模板下载自己做电影网站需要的成本
  • 深圳网站建设易通鼎能联系做仿瓷的网站
  • 自己创建平台型网站网站建设的要点是什么意思
  • 网站建设单位排名网站开发需要哪些人员
  • dedecms做的网站如何上线专业的网站开发团队需要哪些人
  • 建筑设计案例网站这么建设新的网站
  • 基于php的网站开发英文文献网站如何在手机上显示
  • 移动手机网站开发ih5专业的h5制作工具
  • 网站建设教学课件搜狗站长平台
  • 搭建网站用服务器还是虚拟主机特种设备作业人员证查询
  • 龙口网站制作价格天津市建设教育培训网
  • 南京网站定制开发wp商城
  • 可以直接做ppt的网站网站dw建设
  • 茂名市城市建设档案馆网站域名 网站
  • 网站建设课程的感受wordpress批量修改