zoukankan      html  css  js  c++  java
  • [日常] 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)
            }   
    }
    

      

  • 相关阅读:
    771. Jewels and Stones
    706. Design HashMap
    811. Subdomain Visit Count
    733. Flood Fill
    117. Populating Next Right Pointers in Each Node II
    250. Count Univalue Subtrees
    94. Binary Tree Inorder Traversal
    116. Populating Next Right Pointers in Each Node
    285. Inorder Successor in BST
    292. Nim Game Java Solutin
  • 原文地址:https://www.cnblogs.com/taoshihan/p/8717278.html
Copyright © 2011-2022 走看看