• [日常] go语言*-获取URL练习题


    1.主要使用net/http和io/ioutil包

    2.http.Get函数是创建HTTP请求的函数,resp这个结构体中,Body字段包括一个可读的服务器响应流

    3.ioutil.ReadAll函数从response中读取到全部内容,resp.Body.Close关闭resp的Body流

    4.用os.Exit函数来终止进程,并且返回一个status错误码

    5.使用Fprintf与表示任意类型默认格式值的动词%v,向标准错误流打印一条信息

    6.strings.HasPrefix(s, prefix string) bool,判断字符串s是否以prefix 开头

    练习 1.7: 函数调用io.Copy(dst, src)会从src中读取内容,并将读到的结果写入到dst中,使用这个函数替代掉例子中的ioutil.ReadAll来拷贝响应结构体到os.Stdout,避免申请一个缓冲区(例子中的b)来存储。记得处理io.Copy返回结果中的错误。

    练习 1.8: 修改fetch这个范例,如果输入的url参数没有 http:// 前缀的话,为这个url加上该前缀。你可能会用到strings.HasPrefix这个函数。

    练习 1.9: 修改fetch打印出HTTP协议的状态码,可以从resp.Status变量得到该状态码。

    fetch.go

    package main
    
    //导入io/ioutil和net/http包
    import (
            "fmt"
            "io"
            "os"
            //"io/ioutil"
            "net/http"
            "strings"
    )
    
    func main() {
            //for循环命令行参数
            for _, url := range os.Args[1:] {
                    //加入前缀
                    if !strings.HasPrefix(url, "http://") {
                            url = "http://" + url 
                    }   
                    res, err := http.Get(url)
                    //判断错误
                    if err != nil {
                            //向标准错误流打印信息
                            fmt.Fprintf(os.Stderr, "fetch:%v 
    ", err)
                            //终止进程
                            os.Exit(1)
                    }   
                    //输出http code
                    fmt.Printf("
    http status code :%s
    ", res.Status)
    
                    //body,err := ioutil.ReadAll(res.Body)
                    //避免申请一个缓冲区,直接到标准输出流
                    io.Copy(os.Stdout, res.Body)
                    //判断错误
                    if err != nil {
                            //向标准错误流打印信息
                            fmt.Fprintf(os.Stderr, "fetch:%v 
    ", err)
                            //终止进程
                            os.Exit(1)
                    }   
                    res.Body.Close()
                    //输出http code
                    fmt.Printf("
    http status code :%s
    ", res.Status)
                    //fmt.Printf("%s",body)
            }   
    }
    

      

  • 相关阅读:
    Python自制小时钟,并转换为exe可执行程序详解
    Linux下搭建jmeter
    adb server is out of date. killing完美解决
    Python通过百度Ai识别图片中的文字
    robotframework在3.7下的搭建
    VIVO 手机重力传感器踩坑记录
    GPU 实现 RGB -- YUV 转换 (OpenGL)
    iOS UImage 与 RGB 裸数据的相互转换
    CVPixelBuffer的创建 数据填充 以及数据读取
    glReadPixel 读取数据错误问题
  • 原文地址:https://www.cnblogs.com/taoshihan/p/8717278.html
Copyright © 2020-2023  润新知