Python 新人,请教一个关于 Python http client 使用 socks5 代理的问题

2018-02-06 10:14:05 +08:00
 Julio

最近刚学习 Python,想用 Python 写一个本地请求 http 的脚本,但是遇到了一个问题,也没有搜出来解决方案,希望各位 Python 大神指教啊。感谢! 代码如下:

执行结果: <class 'str'> time: 560.594797 ms time: 1348.074913 ms

疑问:为什么我在第 27 行就执行了一句: text = response.text 却耗费了 500 多毫秒啊?(把这句去掉,就是不调用 respon.text )就会很快。 这是什么原因啊?

ps: 1.我直接访问 [百度] 的地址不加 socks 代理,是很快的。 2.直接写 socks5 代理,访问不了谷歌,所以写成了 socks5h 3.我用 nodejs 写,整个请求过程也才 700 多毫秒。

望大神赐教啊!!! Python 新人!!不胜感激!!!

3051 次点击
所在节点    Python
9 条回复
mianju
2018-02-06 10:29:27 +08:00
用 PySocks 包可能会简单点
shuizhengqi
2018-02-06 10:39:44 +08:00
我没理解错的话,response,text 应该是解码 response 的文本内容,你是要读取内容?或者你用 BeautiFulSoup 试试
Julio
2018-02-06 10:42:14 +08:00
@mianju PySocks 确实会简单些,好像也有这个问题。
Julio
2018-02-06 10:44:36 +08:00
@shuizhengqi 是的,是要读取内容,BeautiFulSoup 也要传文本内容给他,也需要先获取内容。
zhengxiaowai
2018-02-06 10:52:35 +08:00
对于 response.text 为什么慢,从源码中可以看出是做了一次 encoding,response 比较大时候确实是比较慢的。

源码看 https://github.com/requests/requests/blob/master/requests/models.py#L830-L866

对于代理,我也不是很清楚,我用的不多
Julio
2018-02-06 11:01:16 +08:00
@zhengxiaowai 非常感谢,你说的对,我看错了,并不是代理的问题,我之前可能是使用百度首页测试的,内容比较少,我换成百度搜索页面后,这个 encoding 的时间也需要 300-400 毫秒。感谢!
ctro15547
2018-02-06 11:06:57 +08:00
学习了!
Xiaobaixiao
2018-02-06 11:44:17 +08:00
最新的 Requests 使用本地 DNS 解析域名,自然无法访问谷歌,要想真的使用代理访问,降级到 2.12.0 吧。
Julio
2018-02-06 14:06:46 +08:00
@Xiaobaixiao 嗯,已经有了其他解决办法,感谢提醒!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/428799

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX