内容简介:最近做了个根据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 **”
这种一般是图片不全,比如这种,不知道谁上传的腿毛图片
这种无效图片 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
罗刚君、杨嘉恺 / 电子工业出版社 / 2013-7 / 85.00元
本书旨在普及Excel VBA 基础理论,以及通过VBA 的高级应用扩展Excel 的功能,提升读者的制表效率,解决工作中的疑难,同时亦可借此开发商业插件。 本书主要分为操作自动化引言篇、入门篇、进阶篇和疑难解答篇,覆盖从入门到提高的所有内容,以满足不同层次的读者需求。其中操作自动化引言篇简述了操作自动化的需求与方式,借此引出VBA 入门篇。VBA 入门篇包含第2 章到第13 章,主要介绍了......一起来看看 《来吧!带你玩转 Excel VBA》 这本书的介绍吧!