http请求原理

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

http 模块

HTTP-server hello world

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

// simehttp1
package main import (
"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请求,然后在打印下获取的结果

// httpClient
package main import (
"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方法来访问指定的网页

// httpHead
package main import (
"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秒

// httpHead
package main import (
"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)
}
}

17 HTTP编程入门的更多相关文章

  1. PHP面向对象(OOP)编程入门教程

    面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...

  2. 转载自~浮云比翼:Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)

    Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)   介绍:什么是线程,线程的优点是什么 线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可 ...

  3. 【浅墨著作】《OpenCV3编程入门》内容简单介绍&勘误&配套源码下载

    经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...

  4. 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?

    本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...

  5. 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?

    本文引用了公众号纯洁的微笑作者奎哥的技术文章,感谢原作者的分享. 1.前言   老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天.实时音视频等)时,如果发现网络连接超时,第一时间想到的就是 ...

  6. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...

  7. 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...

  8. 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    .引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...

  9. [转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?     http://www.52im.net/thread-1732-1-1.html   1.引言 本文接上篇<脑残式网 ...

随机推荐

  1. [转] [Java] 知乎下巴第5集:使用HttpClient工具包和宽度爬虫

    原文地址:http://blog.csdn.net/pleasecallmewhy/article/details/18010015 下载地址:https://code.csdn.net/wxg694 ...

  2. myeclipse开发安装C++

    经过若干google之后(百度就不用说了),又经过了若干尝试,终于用最简单的步骤配起来了.(一些比较旧的文章写的太繁杂了,随着各个工具的升级,搭建环境很简单了).        前言:写博客不是为了炫 ...

  3. python文件编码及执行

    兼容中文编码 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码. 当Python解释器读取源代码时,为了让它按UTF-8编 ...

  4. CPP_运算符重载及友元

    运算符重载 两种重载方法1)成员函数 a + b => a.operator+(b); 一个参数 2)友元函数 a + b => operator+(a, b); 两个参数. friend ...

  5. ListView 多行拖拽排序

    核心代码:修改ListView的属性,及绑定事件 // 初始化listView1. private void InitializeListView() { listView1.AllowDrop = ...

  6. _mysql.c:29:20: error: Python.h: No such file or directory

    在Centos系统中安装 pip install MySQL-python 提示: _mysql.c:29:20: error: Python.h: No such file or directory ...

  7. RGB转灰度图的几种算法

    https://blog.csdn.net/cool1949/article/details/6649429 方法一:    对于彩色转灰度,有一个很著名的心理学公式: Gray = R*0.299 ...

  8. Jackson 处理复杂类型(List,map)两种方法

    http://blog.csdn.net/zhuyijian135757/article/details/38269715 —————————————————————————————————————— ...

  9. 关于Unity中DOTween插件的使用(专题一)

    DOTween flash里面的一个概念叫补间动画,DOTween就是干这个事情的. 补间动画:在1秒钟之内从A点移动到B点,在这个之间会把动画补间补好. 当我们安装好DOTween后,它就会提供很多 ...

  10. c 二维数组动态分配和释放

    c动态语言 函数声明的头文件在<stdlib.h>里 使用malloc函数为字符串分配内存 -->记得释放内存 free() #include <stdio.h> #in ...