1.5 获取一个url
基本思路案例
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
)
func main() {
for _, url := range os.Args[1:] {
resp, err := http.Get(url)
if err != nil {
fmt.Fprintf(os.Stderr, "fetch:%v\n", err)
os.Exit(1)
}
b, err := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if err != nil {
fmt.Fprintf(os.Stderr, "fetch:reading %s:%v\n", url, err)
os.Exit(1)
}
fmt.Printf("%s", b)
}
}
这个程序使用的函数来自两个包:net/http和io/ioutil。
http.Get函数产生一个HTTP请求,如果没有出错,返回结果存在响应结构resp里面。
其中resp的Body域包含服务器端响应的一个可读取数据流。
随后ioutil.ReadAll读取整个响应结果并存入b。
关闭Body数据流来避免资源泄漏,使用Printf将响应输出到标准输出。
调用
go run main.go http://gopl.io
成功输出:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
...
如果HTTP请求失败,fetch报告失败
fetch:Get "http://xxx.io": dial tcp: lookup xx.io: no such host
exit status 1
来源
《Go程序设计语言》