golang中http请求图片遇见的问题汇总(一)

栏目: Go · 发布时间: 7年前

内容简介:最近做了个根据url分析图片信息的demo,其中遇到的几个有意思的问题,发出来分享一下1."stream error: stream ID x; INTERNAL_ERROR"这种情况需要关闭http2.0,没有找到更好的解决办法

最近做了个根据url分析图片信息的demo,其中遇到的几个有意思的问题,发出来分享一下

一.“http请求返回错误”

1."stream error: stream ID x; INTERNAL_ERROR"

这种情况需要关闭http2.0,没有找到更好的解决办法

2.“request canceled”

timeout这点之前笔者没有在意过,设置超时时间都是简单粗暴的:

client := &http.Client{
		Timeout:5 * time.Second,
	}

这样虽然简便,这个相当于一个deadline,不管连接上没连接上,不管成功没成功,5秒后都会被判为超时。

这样就有一个问题,如果我请求一张非常大的图片,即使已经请求成功连接上了,也会因为我们设置的超时时间过短不得已中断请求报出**“request canceled”**,那我们想只要有数据流通就不会中断连接应该怎么做呢

transport := &http.Transport{IdleConnTimeout: DefaultConnectTimeout}
	client := &http.Client{
		Transport: transport,

	}

这样即使下载速度很慢也不会再下载过程中断开请求。

二.“ioutil.ReadAll 错误”

1.“**invalid JPEG format: short Huffman data **”

这种一般是图片不全,比如这种,不知道谁上传的腿毛图片

golang中http请求图片遇见的问题汇总(一)

这种无效图片 go 的image包解析会报“ short Huffman data”,暂时没有找到好的解决方案

2.“EOF”

这种情况下一般是网络波动错误,轻易不会报的,如果特别频繁的话,可能需要检查一下是不是对url做了某些处理,像笔者就是使用了第三方软件导致频繁报EOF

三.关于泄露的问题

自己部署好服务跑了跑,过了几天突然开始报一个奇怪的错误 dial tcp ip:80: connect: cannot assign requested address ,搜了很长时间不知道是什么错误,问了一下大佬,说是看起来像泄露这方面的错误,于是检查自己的代码,看看是不是有的地方没有关闭。

果不其然,仔细查看后发现如下问题

resp, err := config.NoProxyHttpClient.Do(req)
	if err != nil {
		glog.V(4).Infof("url: %s,http err: %s\n", imgUrl, err)
		return nil, err
	}
	if resp.StatusCode != 200 {
		glog.V(4).Infof("url: %s,resp.StatusCode: %d\n", imgUrl, resp.StatusCode)
		err = errors.New(config.HTTPERRORCODE)
		return nil, err
	}
	defer resp.Body.Close()

resp.Body.Close() 关闭方式不对,应该在判断err后立即执行defer语句

resp, err := config.NoProxyHttpClient.Do(req)
	if err != nil {
		glog.V(4).Infof("url: %s,http err: %s\n", imgUrl, err)
		return nil, err
	}
defer resp.Body.Close()
	if resp.StatusCode != 200 {
		glog.V(4).Infof("url: %s,resp.StatusCode: %d\n", imgUrl, resp.StatusCode)
		err = errors.New(config.HTTPERRORCODE)
		return nil, err
	}

ps:我尝试过在 resp, err := config.NoProxyHttpClient.Do(req) 后立即执行关闭操作,有时候会报空指针


以上所述就是小编给大家介绍的《golang中http请求图片遇见的问题汇总(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Build Your Own Web Site the Right Way Using HTML & CSS

Build Your Own Web Site the Right Way Using HTML & CSS

Ian Lloyd / SitePoint / 2006-05-02 / USD 29.95

Build Your Own Website The Right Way Using HTML & CSS teaches web development from scratch, without assuming any previous knowledge of HTML, CSS or web development techniques. This book introduces you......一起来看看 《Build Your Own Web Site the Right Way Using HTML & CSS》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具