Golang里实现Http服务器并解析header参数和表单参数

在http服务里,header参数和表单参数是经常使用到的,本文主要是练习在Go语言里,如何解析Http请求的header里的参数和表单参数,具体代码如下:

package server

import (
   "net/http"
   "strconv"
   "fmt"
)

func HttpStart(port int)  {
   http.HandleFunc("/hello", helloFunc)
   err := http.ListenAndServe(":"+strconv.Itoa(port), nil)
   if err != nil {
      fmt.Println("监听失败:",err.Error())
   }
}

func helloFunc(w http.ResponseWriter, r *http.Request)  {
   fmt.Println("打印Header参数列表:")
   if len(r.Header) > 0 {
      for k,v := range r.Header {
         fmt.Printf("%s=%s\n", k, v[0])
      }
   }
   fmt.Println("打印Form参数列表:")
   r.ParseForm()
   if len(r.Form) > 0 {
      for k,v := range r.Form {
         fmt.Printf("%s=%s\n", k, v[0])
      }
   }
   //验证用户名密码,如果成功则header里返回session,失败则返回StatusUnauthorized状态码
   w.WriteHeader(http.StatusOK)
   if (r.Form.Get("user") == "admin") && (r.Form.Get("pass") == "888") {
      w.Write([]byte("hello,验证成功!"))
   } else {
      w.Write([]byte("hello,验证失败了!"))
   }
}

  

运行后,在chrom浏览器里执行请求:http://127.0.0.1:8001/hello?user=admin&pass=888,服务端会打印参数列表如下:

打印Header参数列表:
Accept-Language=zh-CN,zh;q=0.9
Connection=keep-alive
Cache-Control=max-age=0
Upgrade-Insecure-Requests=1
User-Agent=Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.19 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
打印Form参数列表:
user=admin
pass=888

并且会返回成功结果给客户端的,浏览器里运行结果为:

如果浏览器里不是请求/hello则会报404,如果参数写其他的也会返回验证失败的结果!

原文地址:https://www.cnblogs.com/5bug/p/8494953.html

时间: 2024-10-07 03:02:49

Golang里实现Http服务器并解析header参数和表单参数的相关文章

MVC5 新建项目里不包含jquery.unobtrusive-ajax.js(MVC5异步表单的问题)解决方法

Asp.NET MVC 5 高级编程第5版.pdf 中有解决方法: 用NUGET程序包管理器控制台安装下面这两个文件Install-Package jQuery –version 1.10.2Install-Package Microsoft.jQuery.Unobtrusive.Ajax –version 3.0.0 NUGET程序包管理器控制打开方法: 转自:http://www.cnblogs.com/jys509/p/3878685.html

夺命雷公狗---在js里阻止a标签的跳转和form表单的跳转

<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <a href="http://www.baidu.com">百度</a> <a href="http://www.qq

v-if案例解析(element-ui form-item表单无法验证问题剖析 )

fire 读在最前面: 1.此文章衔接Vue 虚拟Dom 及 部分生命周期初探,相关整体知识点请先阅读后再继续本文阅读 问:当v-if为true时,会重新渲染相关dom节点吗? <child v-if="true"></child> 点击查看涉案代码 点击图中[切换]字样 查看效果,如下图: 流程分析: 1.首先我们按代码画出初始化vnode和点击切换后的vnode,进行第一次 对比,如下图 说明:头头比较的时候,节点没有任何变化,所以直接不动即可,如果a的相关

Zend_Form 创建、校验和解析表单的基础--(手冊)

1.  创建表单对象 创建表单对象很easy:仅仅要实现 Zend_Form: <?php $form = newZend_Form; ? > 对于高级用例.须要创建 Zend_Form 的子类,但对于简单的表单,程序能够用Zend_Form 的对象来创建. 假设想指定表单的动作和方法(总是好主意).用 setAction() 和 setMethod() 来完毕: <?php $form->setAction('/resource/process') ->setMethod(

InfoPath与SharePoint之(六)在表单库里引用InfoPath Form Content Type

在表单库里引用InfoPath Form Content Type 在上一篇,介绍了如何把InfoPath Form类型的Content Type发布到SiteCollection,发布完之后,就可以在已经存在的表单库里引用了. 打开一个已经存在的表单库,点击Ribbon上的Library Settings: 在Settings页面,点击Advanced Settings: 默认情况下,添加Content Type功能是关闭的,在这里开启: 再回到Library Settings页面,就可以添加

js获取表单里的参数并返回键值对

/** * js获取表单里的参数并返回键值对 * @version 1 * @param {Object} - js表单对象 * @returns {Object} - 表单参数键值对 */ function getFormData(form){ if (!form) { return {}; } var params = {} , elems = form.elements ; for(var i in elems){ var elem = elems[i]; if(elem.nodeName

移动端接口碰到了服务器无法解析ios端传回?

今天在为移动端写接口的时候碰到了服务器无法解析ios端传回的json数据的问题(在服务器上能收到请求,但无法得到请求体里的json数据)希望有大牛可以解答一下?后端代码为 //@RequestBody LoginModule json @RequestMapping(value = "/test" ,method = RequestMethod.POST ) @ResponseBody public SeckillResult<Long> test(HttpServletR

群里分享的react的收藏一下!今日周末,改了个表单验证然后无所事事了!

今日周末,改了个表单验证然后无所事事了,然后把昨天群里分享的react的收藏一下尽管现在还在研究angular和nodeJs毕竟刚刚开始用有点不熟...没准以后会研究一下react毕竟看着下面这张图还是觉得有点欢乐的 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,

用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)

老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用. ubuntu上安装: sudo apt-get install tesseract-ocr 非常简单. 2.pytesseract和PIL(pillow) pytesseract用来在python中调用tesseract-ocr,PIL(pillow)用来加载图片,安装方法如下: pip3 in