博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang使用http client发起get和post请求示例
阅读量:6976 次
发布时间:2019-06-27

本文共 1906 字,大约阅读时间需要 6 分钟。

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://woupl.baihongyu.com/

你可能感兴趣的文章
Metasploit攻击Oracle的环境搭建
查看>>
Microsoft Office Communications Server 2007 R2 RTM 简体中文企业版部署速成篇之二
查看>>
ASP.net:添加.net(2.0C#)FCKeditor在线编辑器步骤
查看>>
使用Mono管理Coyote Linux
查看>>
公有云环境下应用程序的自动化部署与水平扩展问题
查看>>
JAVAEclipse:could not find the main class,program will exit!
查看>>
Provisioning Services 7.8 入门系列教程之十三 使用 Boot Device Management(BDM)
查看>>
Centos 6.4下MySQL备份及还原详情介绍
查看>>
sql server 表索引碎片处理
查看>>
ASP网络编程从入门到精通 下载
查看>>
集群概述及原理笔记(1)
查看>>
主动防病毒内容篇
查看>>
无准备,不编程——计算机达人成长之路(15)连载
查看>>
服务器监控--cacti中英文版安装全解
查看>>
Nginx+Tomcat实现反向代理与动静分离
查看>>
WSUS Troubleshooting guide
查看>>
在SQL中使用CRL函数示例
查看>>
ATLAS入门篇之CascadingDropDown控件编程
查看>>
《从零开始学Swift》学习笔记(Day 47)——final关键字
查看>>
linux下磁盘镜像软件DRBD的使用
查看>>