17 HTTP编程入门
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编程入门的更多相关文章
- PHP面向对象(OOP)编程入门教程
面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...
- 转载自~浮云比翼:Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)
Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥) 介绍:什么是线程,线程的优点是什么 线程在Unix系统下,通常被称为轻量级的进程,线程虽然不是进程,但却可 ...
- 【浅墨著作】《OpenCV3编程入门》内容简单介绍&勘误&配套源码下载
经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...
- 脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?
本文引用了“帅地”发表于公众号苦逼的码农的技术分享. 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢 ...
- 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?
本文引用了公众号纯洁的微笑作者奎哥的技术文章,感谢原作者的分享. 1.前言 老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天.实时音视频等)时,如果发现网络连接超时,第一时间想到的就是 ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...
- 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...
- 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手
.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...
- [转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么? http://www.52im.net/thread-1732-1-1.html 1.引言 本文接上篇<脑残式网 ...
随机推荐
- 【微信小程序】Page页面跳转(路由/返回)并传参
页面跳转的方法参考官方文档: https://mp.weixin.qq.com/debug/wxadoc/dev/framework/app-service/route.html 问题:使用wx.na ...
- WPF转换器:时间转换为字符串
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureI ...
- Class类文件结构
平台无关性 Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现.不仅使用Java编译器可以把Java代码编译成存储字节码的Cla ...
- UI设计, 弹出对话框 设计(区分强调按钮和普通按钮,给用户一个 正向建议的强调按钮)
在UI设计时,经常会需要 设计 弹出对话框,以下是个样式设计: 0.标准对话框 说明 Title space : 标题区 contents space : 内容区 function space: 功能 ...
- SQLSERVER SQL备份还原代码C#
public class BakDBHelper { /// <summary> /// 创建数据库备份 /// </summary> public string Create ...
- java Calendar
nowDate.add(Calendar.DAY_OF_MONTH,1); 谁能告诉我这里面的 1 是什么意思 2016年07月20日 13:59:47 javaPie 阅读数:2012 nowD ...
- php curl_multi系列函数实现多线程抓取网页
最近几天在做一个多搜索引擎关键字排名查询工具,用于及时方便的了解关键词在各大搜索引擎的排名. 在抓取360搜索的时候,发现360搜索每页只支持显示10个搜索结果,如果想获取100个搜索结果数据,就得搜 ...
- linux 解压压缩大全
eoiioe linux下解压命令大全 .tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)——— ...
- 记录一下寄几个儿的greendao数据库升级,可以说是非常菜鸡了嗯
之前使用的greendao数据库存储服务器所有的历史推送消息,但是后来消息需要加几个新的字段 举个栗子,比如要新增红色框住的字段到数据库中: 本仙女作为一只思想成熟的菜鸡,当然是加了字段就赶紧重新往里 ...
- R matrix 转换为 dataframe
When I try converting a matrix to a data frame, it works for me: > x <- matrix(1:6,ncol=2,dimn ...