文档章节

golang实现http的get和post

徐学良
 徐学良
发布于 2016/11/17 09:23
字数 432
阅读 113
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

golang要请求远程网页,可以使用net/http包中的client提供的方法实现。查看了官方网站有一些示例,没有太全面的例子,于是自己整理了一下。

get请求

get请求可以直接http.Get方法,非常简单。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

func httpGet() {

    resp, err := http.Get("http://www.01happy.com/demo/accept.php?id=1")

    if err != nil {

        // handle error

    }

 

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {

        // handle error

    }

 

    fmt.Println(string(body))

}

post请求

一种是使用http.Post方式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

func httpPost() {

    resp, err := http.Post("http://www.01happy.com/demo/accept.php",

        "application/x-www-form-urlencoded",

        strings.NewReader("name=cjb"))

    if err != nil {

        fmt.Println(err)

    }

 

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {

        // handle error

    }

 

    fmt.Println(string(body))

}

Tips:使用这个方法的话,第二个参数要设置成”application/x-www-form-urlencoded”,否则post参数无法传递。

一种是使用http.PostForm方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

func httpPostForm() {

    resp, err := http.PostForm("http://www.01happy.com/demo/accept.php",

        url.Values{"key": {"Value"}, "id": {"123"}})

 

    if err != nil {

        // handle error

    }

 

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {

        // handle error

    }

 

    fmt.Println(string(body))

 

}

复杂的请求

有时需要在请求的时候设置头参数、cookie之类的数据,就可以使用http.Do方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

func httpDo() {

    client := &http.Client{}

 

    req, err := http.NewRequest("POST""http://www.01happy.com/demo/accept.php", strings.NewReader("name=cjb"))

    if err != nil {

        // handle error

    }

 

    req.Header.Set("Content-Type""application/x-www-form-urlencoded")

    req.Header.Set("Cookie""name=anny")

 

    resp, err := client.Do(req)

 

    defer resp.Body.Close()

 

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {

        // handle error

    }

 

    fmt.Println(string(body))

}

同上面的post请求,必须要设定Content-Type为application/x-www-form-urlencoded,post参数才可正常传递。

如果要发起head请求可以直接使用http client的head方法,比较简单,这里就不再说明。

本文转载自:http://www.01happy.com/golang-http-client-get-and-post/

徐学良
粉丝 25
博文 213
码字总数 13841
作品 0
浦东
程序员
私信 提问
加载中

评论(0)

golang实现get和post请求的服务端和客户端

服务端 在golang中,实现一个普通的http接口可以处理get请求和类型的post请求,而如果想实现处理json数据的post请求,则需要用另外的方式实现,接收的参数要从中读取: 客户端 golang的标准a...

osc_uarhdl2n
2018/09/01
5
0
golang下处理post和get数据的方法

之前使用python进行编程的时候,最常用的就是通过post和get一个URL抓取所需的数据,之前有一个短信接口使用的python实现的(post数据到某一网关URL),但由于python源码都是公开的(pyc也很容...

问题终结者
2018/11/30
535
0
golang自定义路由控制实现(一)

    由于本人之前一直是Java Coder,在Java web开发中其实大家都很依赖框架,所以当在学习Golang的时候,自己便想着在Go开发中脱离框架,自己动手造框架来练习。通过学习借鉴Java的思想还...

1Day
2018/05/11
0
0
Golang实现requests库

Golang实现requests库 简单的封装下,方便使用,像python的requests库一样。 Github地址 Github 支持 、、、 、 不支持: (现已支持,2019-04-16更新) 使用 下面是常用的例子,请求;表单提...

osc_xgk2otgu
2019/04/11
2
0
使用Sniper来测试Http站点

Sniper是一个功能强大、高性能的HTTP负载工具,采用Golang编写。利用协程并发优势,实现海量并发、超低内存占用、丰富图表展示。是测试、分析、优化服务端性能的绝佳助手! 功能 GET / POST k...

sosg
2013/12/16
292
0

没有更多内容

加载失败,请刷新页面

加载更多

vnc,vnc连接服务器,操作步骤

远程控制能让你不用离开本机,就可以对其他计算机进行管理操作。能实现此功能的软件很多,比如Windows自带的终端服务、PCAnyWhere、冰河等,它们要么“块头"很大多占空间,要么使用麻烦不宜配...

兔子m
今天
25
0
通过双key解决缓存并发问题

public static boolean set(String key, String value, int seconds) { Jedis jedis = null; try { jedis = jedisPool.getResource(); if (seconds > 0){ ......

昵称什么的最讨厌了
今天
35
0
Oracle中连接查询怎么运用??

welcome to 煌sir详解Oracle 篇章,让我们继续一起学习吧~~ 查询--连接查询 一. 基础语法 笛卡尔积:两个表乘积,所有的数据最大集(开发无用) select * from A , B; 内连接 隐式内连接 sele...

煌sir
今天
29
0
Lua差分系统

https://gitee.com/liyonghelpme_admin/LuaDiff Lua差分系统设计 1:通过Protobuf 的 optional 方式,来序列化和反序列化差分数据 2:通过Lua自身的Metatable 来支持 标记数据变动 实现差分数...

liyong2
今天
22
0
85.源码分析

1.hashMap 参考: https://www.cnblogs.com/yujian0817/p/12689722.html HashMap中hash(Object key)原理,为什么(hashcode >>> 16) :https://blog.csdn.net/qq_42034205/article/details/9......

20190513
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部