golang NewRequest/gorequest实现http请求的示例代码
作者:我的猫叫土豆 发布时间:2024-04-30 10:03:26
标签:golang,http,请求
通过go语言实现http请求
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方法
http.NewRequest
客户端:
import (
?? ?"net/http"
?? ?"json"
?? ?"ioutil"
)
type Student struct{
?? ?id string
?? ?name string
}
type StudentReq struct{
?? ?id string
?? ?name string
}
func main() {
?? ?stu := Student{
?? ??? ?id:"2ed4tg5fe35fgty3yy6uh",
?? ??? ?name:"amber",
?? ?}
?? ?stu,err := json.Marshal(&stu)
?? ?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(&stu):将stu对象改为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之后执行,否则报错
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))
}
来源:https://blog.csdn.net/ambzheng/article/details/104483754


猜你喜欢
- 本文实例讲述了Python Web框架之Django框架cookie和session用法。分享给大家供大家参考,具体如下:part 1 概念
- 1.语法及用法(1)语法:str.endswith(suffix[,start][,end])str:字符串,待判断字符串suffix:后缀
- 关于窗口函数的基础,请看文章SQL窗口函数取值窗口函数可以用于返回窗口内指定位置的数据行。常见的取值窗口函数如下:LAG函数可以返回窗口内当
- 如下所示:<!doctype html><html lang="en"> <head>
- 本文实例讲述了Python操作Mongodb数据库的方法。分享给大家供大家参考,具体如下:一 导入 pymongofrom pymongo
- CSS样式和JavaScript脚本是应该放在外部文件中呢?还是把它们放在页面本身之内呢?如何处理是关于一些性能规则的思维,就这些问题,我们
- 后来看到博客园在用NorthScale Memcached Server(官方站点:http://www.couchbase.com/pro
- 类的特殊成员之call#!/usr/bin/env python# _*_coding:utf-8 _*_class SpecialMemb
- 刚刚上网搜了一下如何用python统计列表中不同元素的数量,发现很少,找了半天。我自己来写一种方法。代码如下list=[1,1,2,2,3]
- 一、正则表达式 re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串
- 一、UDP编程1.客户端Client:发起访问的一方。2.服务器端3.server段编程(1)建立socket,socket是负责具体通信的
- 方法1 自带pytorch自带方法,计算模型参数总量total = sum([param.nelement() for param in m
- 导言GridView是由一组字段(Field)组成的,它们都指定的了来自DataSource中的什么属性需要用到自己的输出呈现中。最简单的字
- 互联网上的资源多不胜数,无论我们搜索资料还是查阅新闻,或者是在网上淘物等等,肯定没少见分页!分页模式和表现方法也是各有千秋。我们来看看下面这
- 匹配开头结尾字符功能^匹配字符串开头$匹配字符串结尾示例1:$需求:匹配163.com的邮箱地址email_list = [ "
- 1. 优化你的MySQL查询缓存在MySQL服务器上进行查询,可以启用高速查询缓存。让数据库引擎在后台悄悄的处理是提高性能的最有
- 远程连接SQL Server 2008,服务器端和客户端配置关键设置:第一步(SQL2005、SQL2008):开始-->程序--&g
- 一、cv2.contourArea起初使用该函数的时候看不懂返回的面积,有0有负数的,于是研究了一下。opencv计算轮廓内面积函数使用的是
- Windows环境:安装whl包:pip install wheel ->
- 一、前言在开展接口测试或者是接口面试的过程中,我们会发现很多接口需要依赖前面的接口,需要我们动态从前面的接口返回中提取数据,也就是我们通常说