Featured image of post 获取单个url

获取单个url

使用Go获取单个url

对许多应用而言,访问互联网上的信息和访问本地文件系统一样重要。Go提供了一系列包,在net包下面分组管理,使用它们可以方便地通过互联网发送和接受信息,使用底层地网络连接,创建服务器,此时Go的并发特性特别有用(在下面一节中会示例)

程序fetch可以获取每个指定URL的内容,然后不加解析地输出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// fetch 输出从URL获取的内容
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	for _, url := range os.Args[1:] {
		res, err := http.Get(url)
		if err != nil {
			fmt.Fprintf(os.Stderr, "fetch: %v\n", err)
			os.Exit(1)
		}
		bytes, err := io.ReadAll(res.Body)
		res.Body.Close()
		if err != nil {
			fmt.Fprintf(os.Stderr, "fetch: reading %s: %v\n", url, err)
			os.Exit(1)
		}
		fmt.Printf("%s", bytes)
	}
}

这个程序使用的函数来自两个包:net/httpio.http.Get函数产生一个HTTP请求,如果没有出错,返回结果存在响应结构resp里面。其中respBody域包含服务端相应的一个可读取数据流。随后io.ReadAll读取整个响应结果并存储bytes。关闭Body数据流来避免资源泄漏,使用Printf将响应输出到标准输出。

1
2
3
4
5
6
7
$ go run main.go https://go.dev
<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>

<link rel="preconnect" href="https://www.googletagmanager.com">
<script >(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
渝ICP备2022001449号
本站总访问量