golang NewRequest gorequest 实现http请求
目录
1.http.Post
2.http.NewRequest
3.gorequest
通过go语言实现http请求
1.http.Post
import ("net/http""net/url"
)data := url.Values{"start":{"100"}, "hobby":{"xxxx"}}
body := strings.NewReader(data.Encode())
resp, err := http.Post("127.0.0.1:9338", "application/x-www-form-urlencoded", body)
net/http包没有封装直接使用请求带header的get或者post方法,所以,要想请求中带header,只能使用NewRequest方法
2.http.NewRequest
客户端:
import ("net/http""json""ioutil"
)
type Student struct{id stringname string
}type StudentReq struct{id stringname string
}
func main() {data:= Student{id:"2ed4tg5fe35fgty3yy6uh",name:"amber",}stu,err := json.Marshal(&data)reader := bytes.NewReader(stu)request,err := http.NewRequest("POST", "http://192.168.1.12:8000/create", reader)request.Header.Set("Content-Type", "application/json")client:=&http.Client{}response,err := client.Do(request)defer response.Body.Close()body,err := ioutil.ReadAll(response.Body)fmt.Printf(string(body))var stuReq StudentReq err = json.UnMarshal(body, &stuReq)fmt.Println(json.MarshalIndent(stuReq))
}
解析:
- stu,err := json.Marshal(&data):将data对象改为json格式
- reader := bytes.NewReader(stu):所以将json改为byte格式,作为body传给http请求
- request,err := http.NewRequest(“POST”, “http://192.168.1.12:8000/create”, reader):创建url
- response,err := client.Do(request):客户端发起请求,接收返回值
- body,err := ioutil.ReadAll(response.Body):读取body的值,类型是byte
- json.MarshalIndent(stuReq):修改json为标准格式
注意(坑):
1、header里的参数是Content-Type,不要写成ContentType
2、【go http: read on closed response body 】如果发送的请求是分为2个func写的,记住defer要在ioutil.ReadAll之后执行,否则报错
3.gorequest
这种方式适合在url里拼接参数使用param直接传递
"github.com/parnurzeal/gorequest"func main() {resp, body, errs := gorequest.New().Post("http://127.0.0.1/create").Param("ip", "192.168.1.4").EndBytes()if errs != nil || resp.StatusCode >= 300 {log.Errorf("fail to call api with errors %v, %+v", errs, body)}var stuReq StudentReq err = json.UnMarshal(body, &stuReq)fmt.Println(json.MarshalIndent(stuReq))
}
golang NewRequest gorequest 实现http请求相关推荐
- golang接收 post和get请求参数处理
golang接收 post和get请求 1.golang中获取请求接口中数据(GET) 方式一: API参数 ctx.Param(name string)或者ctx.Params.ByName(nam ...
- golang使用http发送graphql请求
请求内容: query格式: query UnitList($Ids: String!, $offset: Int! ){UnitList(searchParams: {Ids: $Ids, offs ...
- golang post get put delete 请求实例代码
实例如下: package mainimport ("fmt""io/ioutil""net/http""strings" ...
- golang爬虫colly 发送post请求
继续还是工作中使用colly,不管是官网,还是网上的一些文章(其实90%就是把官网的案例抄过去),都是一样的格式,没有讲到post,测试了几次,记录一下post的使用 c := colly.NewCo ...
- Golang gin框架:GET请求示例
package mainimport ("net/http""github.com/gin-gonic/gin" )func main() {r := gin. ...
- golang每隔10秒访问URL
package main import ( "fmt" "io/ioutil" "net/http" "time" ) ...
- golang长连接和短连接的那些事儿
文章目录 一.TCP长连接和短连接区别 1.1 长连接.短连接概念 1.2 长连接.短连接的传输过程区别 1.3 长连接与短连接的优缺点 二.TCP长连接和短连接应用场景 2.1 长连接应用场景 2. ...
- Volley 源码解析之图片请求
一.前言 上篇文章我们分析了网络请求,这篇文章分析对图片的处理操作,如果没看上一篇,可以先看上一篇文章Volley 源码解析之网络请求.Volley 不仅仅对请求网络数据作了良好的封装,还封装了对图片 ...
- 开启云原生 MOSN 新篇章 — 融合 Envoy 和 Golang 生态
注:本文是王发康(毅松)在 2021 GopherChina 上演讲的文字稿,相关分享 PPT 可自行到 MOSN meetup 下载. MOSN meetup 地址: https://github. ...
最新文章
- 机器视觉与机器学习牛人博客
- iOS 仿看了吗应用、指南针测网速等常用工具、自定义弹出视图框架、图片裁剪、内容扩展等源码...
- 五年级计算机学情分析,2015—2016学年小学五年级信息技术上册教学计划
- acdream 1222 Quantization Problem [dp]
- centos查看mysql信息_CentOS查看和修改MySQL字符集
- java B2B2C springmvc mybatis仿淘宝电子商城系统(十)用spring Restdocs创建API文档
- 数据库单表千万行 LIKE 搜索优化手记
- python中字符串相乘结果_LeetCode 43. 字符串相乘 | Python
- UIPickView 和 UIDatePicker
- java会跳出problem_docs/java/concurrent/ConcurrencyProblem.md · wt1814/wt-note - Gitee.com
- python全栈开发-Day11 迭代器、生成器、面向过程编程
- wdatepicker 设置只显示时分_液晶显示多功能电力仪表EX8-33
- 父元素没有高度,子元素高度失效
- Node.js 11.14.0 发布,服务器端的 JavaScript 运行环境
- 【图像配准】基于matlab GUI SIFT图像配准拼接【含Matlab源码 854期】
- 信息熵、相对熵与交叉熵
- 微信小程序影视评论交流平台系统毕业设计毕设(6)开题答辩PPT
- gjs/seed相关笔记
- 树莓派云盘内网穿透及扩容
- [置顶] wifi漫游测试过程
热门文章
- 2009年9月全国计算机等级考试四级网络工程师试卷_选择题
- java 鼠标 停止工作原理,java系统级的键盘和鼠标状态
- 用 Flask 来写个轻博客 (13) — M(V)C_WTForms 服务端表单检验
- notepad宏的使用,定制各种操作,比如删除一整行、从当前位置到行末用某字符替换
- 让Keil生成汇编文件、bin文件
- 基于ftp服务的三种登录方式及其相关的访问控制和优化
- com关于IUnknown接口
- 小米6发布,雷军亲手终结小米低价时代,低价竞争还能走多远?
- hdu4847 Wow! Such Doge! KMP
- HTTPS 接入优化建议