服务端

在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. 洛谷 P2572 [SCOI2010]序列操作

    题意简述 维护一个序列,支持如下操作 把[a, b]区间内的所有数全变成0 把[a, b]区间内的所有数全变成1 把[a,b]区间内所有的0变成1,所有的1变成0 询问[a, b]区间内总共有多少个1 ...

  2. zuul 路由网关 微服务架构系统中

    在微服务架构中,基本包含以下常见的组件.服务注册与发现.服务消费.负载均衡.断路器.只能路由.配置管理等.一个简单的微服务架构系统如下 一.Zuul简介 Zuul的主要功能是路由转发和过滤器.路由功能 ...

  3. 聊一聊 SpringBoot 自动配置的原理

    解析思路 我们建立好一个SpringBoot的工程后,我们将从启动类,SpringBootApplication开始进行探究. 开始解析 首先我们建立一个 Springboot的工程.找到启动类,我们 ...

  4. 在centos6系列vps装Tomcat8.0

    In the following tutorial you will learn how to install and set-up Apache Tomcat 8 on your CentOS 6 ...

  5. 网页如何设置favicon.ico

    1.首先制作ico图,并命名favicon.ico 2.将文件放在项目的根目录下

  6. Linux - 通过expect工具实现脚本的自动交互

    目录 1 安装expect工具 2 expect的常用命令 3 作用原理简介 3.1 示例脚本 3.2 脚本功能解读 4 其他脚本使用示例 4.1 直接通过expect执行多条命令 4.2 通过she ...

  7. [SCOI2007]压缩(动态规划,区间dp,字符串哈希)

    [SCOI2007]压缩 状态:设\(dp[i][j]\)表示前i个字符,最后一个\(M\)放置在\(j\)位置之后的最短字串长度. 转移有三类,用刷表法来实现. 第一种是直接往压缩串后面填字符,这样 ...

  8. 谈谈JVM垃圾回收

    概述 Java运行时区域中,程序计数器,虚拟机栈,本地方法栈三个区域随着线程的而生,随线程而死,这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收问题.而Java堆和方法区则不一样,一个接口的 ...

  9. Git安装与使用(windows环境)(一)----Git安装、生成公钥和私钥、添加SSH

    安装 1.从官网下载git:http://git-scm.com/downloads 2.安装git,选择git组件安装,如下图 3.一直next,直到出现下面的窗口.这里是选择命令行形式.(可以理解 ...

  10. Liunx软件安装之Nginx

    安装 Nginx 1) 添加 Nginx 到 YUM 源 sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-rele ...