解决golang https请求提示x509: certificate signed by unknown authority

使用golang做一个小爬虫的时候,目标URL是一个使用了自签证书的https站点,在请求时,报错如下:

Get https://x.x.x.x/cgi-bin/showflux.cgi: x509: certificate signed by unknown authority
panic: Get https://x.x.x.x/cgi-bin/showflux.cgi: x509: certificate signed by unknown authority

仅仅为了爬取内容而言,可以使用以下方法解决

步骤一:
引入 "crypto/tls" 包

步骤二:
定义TLSClientConfig,忽略证书校验:

tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }

步骤三:
修改

client := &http.Client{}

client := &http.Client{Transport: tr}

golang环境变量配置

要安装并顺利使用 Go,第一步就是要设置 Go 的环境。

需要设置的 Go 的环境变量,一共有三个。

GOROOT Go 语言的源码以及安装目录。
GOPATH Go 语言的开发目录,目录可以有多个,但是,当我们执行 go get 命令的时候,如未指定目录,会默认保存在第一个目录下。

GOROOT_BOOTSTRAP 这个目录在安装 Go 1.5 版本及之后的版本时需要设置。由于在 1.4 版本后,Go 编译器实现了自举,即通过 1.4 版本来编译安装之后版本的编译器。如果不设置该环境变量的话,会产生这样一个错误 Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.。

除此之外,还需要配置 PATH 环境变量到 Go 的二进制程序目录。
我们需要在 ~/.bash_profile 中添加下面的代码(我把所有的 Go 语言相关的东西都放在了 ~/.golang 下面了):

export GOROOT=$HOME/.golang/go
export GOPATH=$HOME/.golang/path
export PATH=$PATH:$HOME/.golang/go/bin
export GOROOT_BOOTSTRAP=$HOME/.golang/go1.4

Linux使用netstat命令查看并发连接数

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

解释:

返回结果示例:

LAST_ACK 5 (正在等待处理的请求数)
SYN_RECV 30

ESTABLISHED 1597 (正常数据传输状态)
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057 (处理完毕,等待超时结束的请求数)

状态:描述

CLOSED:无连接是活动的或正在进行

LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

如果只是想查看当前并发的连接数,可以使用以下命令:

netstat -nat|grep ESTABLISHED|wc -l