博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
17 HTTP编程入门
阅读量:6985 次
发布时间:2019-06-27

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

http请求原理

http请求原理我就不多说了,网上一搜就能搜索到,下面我注意是记录下http模块的使用方法

http 模块

HTTP-server hello world

我们使用HandleFunc来把url与处理函数绑定在一块就可以处理http请求了。

// simehttp1package mainimport (    "fmt"    "net/http")func hello(w http.ResponseWriter, r *http.Request) {    fmt.Println("handle hello")    fmt.Fprintf(w, "hello")}func main() {    http.HandleFunc("/", hello)   // 把url和处理这个url的方法绑定下    err := http.ListenAndServe("0.0.0.0:80", nil)     // 启动服务    if err != nil {        fmt.Println("http listen failed")    }}

HTTP-Client

我们使用http模块来发送一个GET方法的http请求,然后在打印下获取的结果

// httpClientpackage mainimport (    "fmt"    "io/ioutil"    "net/http")func main() {    res, err := http.Get("http://www.baidu.com")   // 使用GET方法请求数据    if err != nil {        fmt.Println("get err:,", err)        return    }    data, err := ioutil.ReadAll(res.Body)   // 读取获取的html  body    if err != nil {        fmt.Println("get data err:", err)        return    }    fmt.Println(string(data))}

HTTP-head

我们可以使用head方法来访问指定的网页

// httpHeadpackage mainimport (    "fmt"    "net/http")var url = []string{    "http://www.baidu.com",    "http://google.com",}func main() {    for _, v := range url {        resp, err := http.Head(v)   // head方法获取内容        if err != nil {            fmt.Printf("head %s failed,err:", v, err)            continue        }        fmt.Printf("head succ,status:%v\n", resp.Status)    }}

显然我们访问谷歌的时候因为墙的原因导致访问不了,超时时间比较长,那么我们可以自己定义下超时时间,自己定义的话只需要设置Dial 的超时时间即可,我们设置为2秒

// httpHeadpackage mainimport (    "fmt"    "net"    "net/http"    "time")var url = []string{    "http://www.baidu.com",    "http://google.com",}func main() {    for _, v := range url {        c := http.Client{ // 指定http的超时时间,基本上对这个Client结构体赋值。更多详情可以看源码            Transport: &http.Transport{                Dial: func(network, addr string) (net.Conn, error) {                    timeout := time.Second * 2 // 这里设置超时时间为2秒                    return net.DialTimeout(network, addr, timeout)                },            },        }        resp, err := c.Head(v)        if err != nil {            fmt.Printf("head %s failed,err:", v, err)            continue        }        fmt.Printf("head succ,status:%v\n", resp.Status)    }}

转载地址:http://uqmpl.baihongyu.com/

你可能感兴趣的文章
axis1.4生成客户端
查看>>
论“性能需求分析”系列专题(一)之 性能需求剖析
查看>>
Leetcode: Unique Paths II
查看>>
SQL Server 跨库同步数据
查看>>
JCheckBox使用示例
查看>>
LaTeX使用listings宏包插入代码时,将代码字体设为 Monaco
查看>>
设计模式之迭代子模式
查看>>
代码评审的不可能三角
查看>>
揭秘ThreadLocal
查看>>
七年蜕变 感恩献礼
查看>>
共享经济、短视频、新零售、AI:寻觅2019年新经济未来走向
查看>>
zabbix配置邮箱报警
查看>>
使用ulimit设置文件最大打开数
查看>>
[Step By Step]SAP HANA PAL指数回归预测分析Exponential Regression编程实例EXPREGRESSION(模型)...
查看>>
VMware Data Recovery备份恢复vmware虚拟机
查看>>
solr多core的处理
查看>>
解决DeferredResult 使用 @ResponseBody 注解返回中文乱码
查看>>
C# WinForm开发系列 - TextBox
查看>>
28岁少帅统领旷视南京研究院,LAMDA魏秀参专访
查看>>
java文件传输
查看>>