Python3 Request.text 响应数据很大时 编码问题

问题描述

下面这个get方法是重写的,一般的rest api请求时,响应速度很快,可以正常返回,当我get一个文件,比如800M的文件时,响应速度非常慢?

def get(self, url,ip_list):
    self.thread_list=[]
    self.error=0
    self.result=None
    self.error_code=0
    self.res = None
    for j in ip_list:
        real_url=j+url
        t=MyThread(get_request,args=(real_url,type))
        self.thread_list.append(t)
        t.start()
    for k in self.thread_list:
        k.join()
        res=k.get_result()
        res_code=res.status_code
        if res=='error':
            self.error=1
            self.error_code='request'
        else:
            res_code=res.status_code
            if res_code>=200 and res_code <400:
                self.result=res.text#问题点
                self.res = res
            else:
                self.error_code=res_code
                self.error=1
                self.result=res.text

问题定位

经过加断点调试发现【问题点】耗时较久,

解决问题

经查阅如果response.content太大的话,大于3M时,会自动计算编码,因为请求是没有附带编码,获取后也没有设置编码,所以

 self.result=res.text#问题点

因为返回太大所以回去计算编码,因为内容过长导致计算编码的时间很长。

解决办法

1、reponse.encoding
2、chardet#https://chardet.readthedocs.io/en/latest/usage.html#advanced-usage
3、https://pypi.org/project/cchardet/

类似问题:

https://github.com/psf/requests/issues/5523

## request对象的方法使用 ```javascript ``` 该语句用于获取当前网页的相对路径 例如: 访问路径为:http://localhost:8080/hansom/response.jsp **request.getContextPath()**返回虚拟路径: /hansom **request.getScheme()**返回使用的协议:http **request.getServerName()**返回所在服务器的名字:localhost **request.getServerPort()**返回IP端口:8080 以下为个人的request笔记: **request.getProtocol()** 得到协议的名称 如:HTTP/1.0 禁用缓存:(转载:https://blog.csdn.net/lyclngs/article/details/25964559) **response.setHeader("Pragma", "no-cache")** **response.setHeader("Cache-Control", "no-cache")** **response.setHeader( "Pragma", "no-cache" ); response.addHeader( "Cache-Control", "must-revalidate" ); response.addHeader( "Cache-Control", "no-cache" ); response.addHeader( "Cache-Control", "no-store" ); response.setDateHeader("Expires", 0);** 单纯的使用 xmlhttp.setRequestHeader("Cache-Control","no-cache")无效。 Cache-Control头域   Cache-Control指定请求响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:   Public指示响应可被任何缓存区缓存。   Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。   no-cache指示请求响应消息不能缓存   no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求响应消息都不使用缓存。   max-age指示客户机可以接收生存期不于指定间(以秒为单位)的响应。   min-fresh指示客户机可以接收响应间小于当前间加上指定间的响应。   max-stale指示客户机可以接收超出超期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超期指定值之内的响应消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老虎爱代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值