服务端

在golang中,实现一个普通的http接口可以处理get请求和x-www-form-urlencoded类型的post请求,而如果想实现处理json数据的post请求,则需要用另外的方式实现,接收的参数要从request.Body中读取:

getpost.go

package main

import (
"net/http"
"encoding/json"
"log"
) func main() { http.HandleFunc("/login1", login1)
http.HandleFunc("/login2", login2)
http.ListenAndServe("0.0.0.0:8080", nil)
} type Resp struct {
Code string `json:"code"`
Msg string `json:"msg"`
} type Auth struct {
Username string `json:"username"`
Pwd string `json:"password"`
} //post接口接收json数据
func login1(writer http.ResponseWriter, request *http.Request) {
var auth Auth
if err := json.NewDecoder(request.Body).Decode(&auth); err != nil {
request.Body.Close()
log.Fatal(err)
}
var result Resp
if auth.Username == "admin" && auth.Pwd == "123456" {
result.Code = "200"
result.Msg = "登录成功"
} else {
result.Code = "401"
result.Msg = "账户名或密码错误"
}
if err := json.NewEncoder(writer).Encode(result); err != nil {
log.Fatal(err)
}
} //接收x-www-form-urlencoded类型的post请求或者普通get请求
func login2(writer http.ResponseWriter, request *http.Request) {
request.ParseForm()
username, uError := request.Form["username"]
pwd, pError := request.Form["password"] var result Resp
if !uError || !pError {
result.Code = "401"
result.Msg = "登录失败"
} else if username[0] == "admin" && pwd[0] == "123456" {
result.Code = "200"
result.Msg = "登录成功"
} else {
result.Code = "203"
result.Msg = "账户名或密码错误"
}
if err := json.NewEncoder(writer).Encode(result); err != nil {
log.Fatal(err)
}
}

客户端

golang的标准api中用于http客户端请求的主要有三个api : http.Get,http.Post,http.PostForm,其区别如下:

API 特点
http.Get 发送get请求
http.Post post请求提交指定类型的数据
http.PostForm post请求提交application/x-www-form-urlencoded数据

在使用http客户端api的时候要注意一个问题:请求地址的url必须是带http://协议头的完整url,不然请求结果为空。

getpostclient.go

package main

import (
"net/http"
"fmt"
"io/ioutil"
"net/url"
"encoding/json"
"bytes"
) type auth struct {
Username string `json:"username"`
Pwd string `json:"password"`
} func main() {
get()
postWithJson()
postWithUrlencoded()
} func get() {
//get请求
//http.Get的参数必须是带http://协议头的完整url,不然请求结果为空
resp, _ := http.Get("http://localhost:8080/login2?username=admin&password=123456")
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
//fmt.Println(string(body))
fmt.Printf("Get request result: %s\n", string(body))
} func postWithJson() {
//post请求提交json数据
auths := auth{"admin","123456"}
ba, _ := json.Marshal(auths)
resp, _ := http.Post("http://localhost:8080/login1","application/json", bytes.NewBuffer([]byte(ba)))
body, _ := ioutil.ReadAll(resp.Body)
fmt.Printf("Post request with json result: %s\n", string(body))
} func postWithUrlencoded() {
//post请求提交application/x-www-form-urlencoded数据
form := make(url.Values)
form.Set("username","admin")
form.Add("password","123456")
resp, _ := http.PostForm("http://localhost:8080/login2", form)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Printf("Post request with application/x-www-form-urlencoded result: %s\n", string(body))
}

运行getpost.go后再运行getpostclient输出结果如下:

Get request result: {"code":"200","msg":"登录成功"}

Post request with json result: {"code":"200","msg":"登录成功"}

Post request with application/x-www-form-urlencoded result: {"code":"200","msg":"登录成功"}

Process finished with exit code 0

golang实现get和post请求的服务端和客户端的更多相关文章

  1. python服务器端、客户端的模型,客服端发送请求,服务端进行响应(web.py)

    服务器端.客户端的模型,客服端发送的请求,服务端的响应 相当于启动了一个web server install web.py 接口框架用到的包 http://webpy.org/tutorial3.zh ...

  2. 前端发起resultUrl请求,服务端收到后做逆向处理,校验sign后,执行originUrl逻辑

    originUrl=http://test.com:8080/user/alipay_phone?uid=123&amount=21.3第0步:前后端约定32位密钥KEY第一步:对参数按照ke ...

  3. 用http请求thrift服务端出现了内存溢出的情况

    记一次内存溢出的分析经历 - Janti - 博客园 https://www.cnblogs.com/superfj/p/8474288.html 说在前面的话 朋友,你经历过部署好的服务突然内存溢出 ...

  4. (C#:Socket)简单的服务端与客户端通信。

    要求:1.可以完成一对一的通信:2.实现服务端对客户端一对多的选择发送:3.可以实现服务端的群发功能:4.可以实现客户端文件的发送: 要点:服务器端:第一步:用指定的端口号和服务器的ip建立一个End ...

  5. 解决有关flask-socketio中服务端和客户端回调函数callback参数的问题(全网最全)

    由于工作当中需要用的flask_socketio,所以自己学习了一下如何使用,查阅了有关文档,当看到回调函数callback的时候,发现文档里都描述的不太清楚,最后终于琢磨出来了,分享给有需要的朋友 ...

  6. DSAPI多功能组件编程应用-HTTP监听服务端与客户端_指令版

    前面介绍了DSAPI多功能组件编程应用-HTTP监听服务端与客户端的内容,这里介绍一个适用于更高效更快速的基于HTTP监听的服务端.客户端. 在本篇,你将见到前所未有的超简化超傻瓜式的HTTP监听服务 ...

  7. java http post/get 服务端和客户端实现json传输

    注:本文来源于<java http post/get 服务端和客户端实现json传输> 最近需要写http post接口所以学习下. 总的还是不难直接上源码! PostHttpClient ...

  8. DSAPI HTTP监听服务端与客户端

    本文中,演示了使用DSAPI.网络相关.HTTP监听,快速建立服务端和客户端. HTTP监听服务端的作用,是监听指定计算机端口,以实现与IIS相同的解析服务,提供客户端的网页请求,当然,这不仅仅是应用 ...

  9. DSAPI HTTP监听服务端与客户端_指令版

    前面介绍了DSAPI多功能组件编程应用-HTTP监听服务端与客户端的内容,这里介绍一个适用于更高效更快速的基于HTTP监听的服务端.客户端. 在本篇,你将见到前所未有的超简化超傻瓜式的HTTP监听服务 ...

随机推荐

  1. Markdown的最常用标记符号

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. md就是markdown 如果你要把这段文字定义成标题,只需要在前面加上一个#号, ...

  2. Dubbo的基本介绍及使用

    一,前言 ​ 在面对新技术新事物的时候,我们首先应该了解这是一个什么东东,了解为什么使用这门技术,如果我们不使用又会有什么影响.比如,本篇博客介绍Dubbo的基本使用,此时我们应该先要明白我为什么要使 ...

  3. (十二)c#Winform自定义控件-分页控件

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

  4. 一个最简单的通过自定义注解形式实现AOP的例子

    1.首先实现AOP实例的第一步即声明切面类,两种方式(1.基于注解形式@Aspect,2.基于xml配置,一般都通过注解来声明切面类) 2.切入点表达式大致也有两种,一种是直接根据方法的签名来匹配各种 ...

  5. 使用Python的Django和layim实现即时通讯

    看到Django和layim实现websocketde资料很少,自己就琢磨了下,顺便搭建出来了.自己要去找闲心大神授权呀. 先来看图  这是初次搭建的,今天一天就搞定.我自己接入了图灵机器人. Pyt ...

  6. Scrum 工件: 速度图和燃尽图

    速度图 Velocity用于衡量scrum团队持续提供业务价值的速度,可以采用历史估算的方法,衡量一个又一个sprint的速度.团队通过跟踪完成达到自己团队完成标准的故事点的数量,就可以基于相对点值对 ...

  7. springBoot配置activeMq点对点模式消费信息以及独占模式消费如何设置

    1.在pom文件中引入对应jar包 <!--activeMQ start--> <dependency> <groupId>org.springframework. ...

  8. jquery实现表格导入到Excel(加图片)

      话不多说直接上代码 第一步:导入jquery的插件https://github.com/rainabba/jquery-table2excel HTML部分: 第二步:添加一个按钮 <but ...

  9. 百度地图获取定位,实现拖动marker定位,返回具体的位置名

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  10. 一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!

    不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ...