• 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
    ", 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
    ", resp.Status)
    	}
    }
    
  • 相关阅读:
    690. Employee Importance 员工重要性
    682. Baseball Game 棒球比赛计分
    680. Valid Palindrome II 有效的回文2
    553. Optimal Division 最佳分割
    服务器oracle数据库定时备份
    数据类型和抽象数据类型
    静态链表和动态链表的区别:
    it网站
    java 移动开发获取多级下拉框json数据的类和mobile-select-area插件
    redis持久化之aof篇
  • 原文地址:https://www.cnblogs.com/liaojiafa/p/7414291.html
Copyright © 2020-2023  润新知