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

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

内容简介:最近做了个根据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请求图片遇见的问题汇总(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

来吧!带你玩转 Excel VBA

来吧!带你玩转 Excel VBA

罗刚君、杨嘉恺 / 电子工业出版社 / 2013-7 / 85.00元

本书旨在普及Excel VBA 基础理论,以及通过VBA 的高级应用扩展Excel 的功能,提升读者的制表效率,解决工作中的疑难,同时亦可借此开发商业插件。 本书主要分为操作自动化引言篇、入门篇、进阶篇和疑难解答篇,覆盖从入门到提高的所有内容,以满足不同层次的读者需求。其中操作自动化引言篇简述了操作自动化的需求与方式,借此引出VBA 入门篇。VBA 入门篇包含第2 章到第13 章,主要介绍了......一起来看看 《来吧!带你玩转 Excel VBA》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具