内容简介:进来看了golang写兵法爬虫的资料,于是自己动手简单的尝试了一下,发现在使用运行是报的错误
进来看了golang写兵法爬虫的资料,于是自己动手简单的尝试了一下,发现在使用 http.Get("https://...")
的时候,会报错。原因是我的环境设置了上网代理。上网搜索了一些问题,耗时两天才最终解决,现将解决过程记录下来,仅供参考。
最初的源码
package main import ( "fmt" "net/http" ) func main() { seedUrl := "https://www.douban.com/" body, err := http.Get(seedUrl) if err != nil { fmt.Errorf("get https://www.douban.com/ error") panic(err) } fmt.Printf("%s\n", body) }
运行是报的错误 panic: Get https://www.douban.com/: proxyconnect tcp: tls: first record does not look like a TLS handshake
- 第一次搜索,给出的提示是没有TLS添加证书,需要修改源码,修改后的源码
- 运行时进入无限等待,没有探究为什么。继续搜索也没有解决。
package main import ( "crypto/tls" "fmt" "net/http" ) func main() { tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, } client := &http.Client{Transport: tr} seedUrl := "https://www.douban.com/" body, err := client.Get(seedUrl) if err != nil { fmt.Errorf("get https://www.douban.com/ error") panic(err) } fmt.Printf("%s\n", body) }
- 第二天,换一种思路,因为我的机器上网设置了代理,所以就检索如何用golang设置http代理。修改代码如下,可正常工作。
package main import ( "crypto/tls" "fmt" "io/ioutil" "net/http" "net/url" ) func main() { proxy := func(_ *http.Request) (*url.URL, error) { return url.Parse("http://你的代理:80") } tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, Proxy: proxy, } client := &http.Client{Transport: tr} seedUrl := "https://www.douban.com/" resp, err := client.Get(seedUrl) if err != nil { fmt.Errorf("get https://www.douban.com/ error") panic(err) } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Printf("%s\n", body) }
总结
- 首先分析运行的环境是什么样的,比如我的设置了上网代理
- 错误搜索解决不了问题时,进行环境相关的关键词搜索
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 像访问本地文件系统一样访问云存储
- 如何访问P站 | Pixiv 被墙无法访问的解决方法
- Spark实战--寻找5亿次访问中,访问次数最多的人
- 逆天操作-将https访问通过反向代理转换成http访问
- node.js – 数字海洋上的访问节点应用程序 – 无法访问此站点
- GitHub 访问加速指南
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。