go的net/http用法
http包提供了HTTP客户端和服务端的实现
一:http客户端的几种方法
1、 func (c *Client) Get(url string) (resp *Response, err error)
说明: 利用get方法请求指定的url,Get请求指定的页面信息,并返回实体主体
2、func (c *Client) Head(url string) (resp *Response, err error)
说明:利用head方法请求指定的url,Head只返回页面的首部
3、func (c *Client) Post(url string, bodyType string, body io.Reader) (resp *Response, err error)
说明:利用post方法请求指定的URl,如果body也是一个io.Closer,则在请求之后关闭它
4、func (c *Client) PostForm(url string, data url.Values) (resp *Response, err error)
说明:利用post方法请求指定的url,利用data的key和value作为请求体.
5、func (c *Client) Do(req *Request) (resp *Response, err error)
说明:Do发送http请求并且返回一个http响应,遵守client的策略,如重定向,cookies以及auth等.当调用者读完resp.body之后应该关闭它,
如果resp.body没有关闭,则Client底层RoundTripper将无法重用存在的TCP连接去服务接下来的请求,如果resp.body非nil,则必须对其进行关闭.
通常来说,经常使用Get,Post,或者PostForm来替代Do
代码示例
1、http.Get
package main import (
"fmt"
"io/ioutil"
"net/http"
) func main() {
requestUrl := "http://www.baidu.com"
response, err := http.Get(requestUrl) if err != nil {
fmt.Println(err)
} defer response.Body.Close() body, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(body))
}
2、http.Post
package main import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"net/url"
) func main() {
requestUrl := "http://www.baidu.com/" // request, err := http.Get(requestUrl)
// request, err := http.Head(requestUrl)
postValue := url.Values{
"username": {"hangmeimei"},
"address": {"anhui"},
"subject": {"world"},
"form": {"beij"},
}
//request, err := http.PostForm(requestUrl, postValue) body := bytes.NewBufferString(postValue.Encode())
request, err := http.Post(requestUrl, "text/html", body)
if err != nil {
fmt.Println(err)
} defer request.Body.Close()
fmt.Println(request.StatusCode)
if request.StatusCode == {
rb, err := ioutil.ReadAll(request.Body)
if err != nil {
fmt.Println(rb)
}
fmt.Println(string(rb))
}
}
3、 http.Do
package main import (
"fmt"
"io/ioutil"
"net/http"
"strconv"
) func main() {
client := &http.Client{}
request, err := http.NewRequest("GET", "http://www.baidu.com", nil)
if err != nil {
fmt.Println(err)
} cookie := &http.Cookie{Name: "Tom", Value: strconv.Itoa()}
request.AddCookie(cookie) //向request中添加cookie //设置request的header
request.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
request.Header.Set("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3")
request.Header.Set("Accept-Encoding", "gzip,deflate,sdch")
request.Header.Set("Accept-Language", "zh-CN,zh;q=0.8")
request.Header.Set("Cache-Control", "max-age=0")
request.Header.Set("Connection", "keep-alive") response, err := client.Do(request)
if err != nil {
fmt.Println(err)
return
} defer response.Body.Close()
fmt.Println(response.StatusCode)
if response.StatusCode == {
r, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(r))
}
}
二:建立web服务器
package main import (
"net/http"
) func SayHello(w http.ResponseWriter, req *http.Request) {
w.Write([]byte("Hello"))
} func main() {
http.HandleFunc("/hello", SayHello)
http.ListenAndServe(":8080", nil)
}
说明:
首先调用Http.HandleFunc
往DefaultServeMux的map[string]muxEntry中增加对应的handler和路由规则
http.ListenAndServe
启动一个http服务器,监听8080端口
上面的代码中蕴含着http服务器处理http的流程,有时间可以看源码分析分析
参考:
https://www.cnblogs.com/msnsj/p/4365186.html
http://www.infoq.com/cn/articles/golang-standard-library-part02
go的net/http用法的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
- [转]thinkphp 模板显示display和assign的用法
thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...
随机推荐
- 数据同步到redis中时候需要 需要给关联的表增加id 如果是一对多 则增加list存储id 如果是一个 则增加一个字段 ;目的是便于取值
- git在Linux下的安装
参考:https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git Git 的工作需要调用 curl,zlib,op ...
- Zookeeper注册中心底层实现小记
内容摘自微信公众号,程序员小灰.推荐-ing Zookeeper的数据模型 Zookeeper的数据模型是什么样子呢?它很像数据结构当中的树,也很像文件系统的目录. 树是由节点所组成,Zookeepe ...
- 抓包工具Fiddler的使用说明
软件介绍 Fiddler是一个C#实现的浏览器抓包和调试工具,fiddler启用后作为一个proxy存在于浏览器和服务器之间,从中监测浏览器与服务器之间的http/https级别的网络交互.目前可以支 ...
- Server socket
用法都一样 区别: self.request TCP self.requsst 代表具体的链接 UDP self.requst 代表一个小元组(元组里面: 第一个元素 客户端发来的数据 ,第 ...
- 【XSY2733】Disembrangle DP
题目描述 有一个\(3\times n\)的网格,一些格子里已经有棋子了,一些格子里还没有. 每次你可以选择往一个没有棋子的格子里放一个棋子,但要满足这个格子上下两个格子都有棋子或左右两个格子都有棋子 ...
- hihocoder#1333 : 平衡树·Splay2 (区间操作)
题面: #1333 : 平衡树·Splay2 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:好麻烦啊~~~~~ 小Hi:小Ho你在干嘛呢? 小Ho:我在干活啊! ...
- MT【265】a+b,ab
已知$a+b=1$,求$(a^3+1)(b^3+1)$的最大值_____ $(a^3+1)(b^3+1)=a^3+b^3+a^3+b^3+1$ $=(a+b)^3(a^2+b^2-ab)+a^3b^3 ...
- Eslint检测出的问题如何自动修复
1. sublime 插件 eslintAutoFix 目前只试了windows下 真是大坑!如果你用了这个插件但不能自动修复,那就不要再用这个了!全网无解! 提示系统找不到指定的文件,各种路径加入系 ...
- [loj6388] 「THUPC2018」赛艇 / Citing
Description 给你一个\(~n \times m~\)的\(~01~\)矩阵,一个人在这个矩阵中走了\(~k~\)步,每一次都往四联通方向中的一个走一步.给定这个人每一步走的方向,已知这 ...