批量验证代理 IP 是否可用, 有什么特别快的骚操作吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ClericPy
V2EX    Python

批量验证代理 IP 是否可用, 有什么特别快的骚操作吗?

  •  
  •   ClericPy
    ClericPy 2020-05-04 22:14:01 +08:00 4229 次点击
    这是一个创建于 2054 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题就是: 有什么特别省流量, 速度特别快, 结果也比较正确的校验一堆免费代理是否健康的通用方式? 这个问题两年前问过, 现在想再看看有没有新的思路

    1. 刚学编程那会, 直接给 requests 无脑挂上代理去请求的

    2. 后来发现可以先用内置的 socket 库去连一连那个代理, timeout 设置的很小就可以先筛一轮无效 IP

    3. 后来觉得为了省流量, 改成 streaming Response 获取 1 ~ 5 KB 就断开

    4. 后来觉得 head 请求或者 options 请求也应该能试试连接是否通畅

    5. 后来觉得应该有一个连接成功率的东西存在, 所以每次发 5 个请求, 计算成功请求的占比

    6. 再后来觉得只发 head 请求不能证明 get 请求是 OK 的... 所以又改为了流式请求比较前 1 KB 的数据, 顺便记录上请求时间

    7. 再后来看了下一些 star 挺多的代理池代码, 貌似大部分人就是普通的对 baidu 发了个 get 请求, 然后也不验证返回的数据, 甚至也没使用 streaming, 就是判断下 status_code 是不是 200

    8. 现在想看看有没有什么特别一点的思路, 比如先对 IP 握个手 SYN?

    第 1 条附言    2020-05-04 23:00:54 +08:00
    就是想找个思路可以验证一个代理 IP 是健康的, 尽可能的流量小 + 耗时短, 如果有什么比较稳定的接口专门用来验证这个就更好了, 因为还要计算耗时来判断代理的连接速度

    之前一直用的接口是 p.3.cn 够快而且抗的住并发 ... 蔷外的是某视频网站的一个很小的 css, 好像 1.3 KB

    简单的说, 希望有个什么途径可以极快地先判断出无效的 IP, 也就是分段验证, 早年间写过代理池, 是普通的 aiohttp 设置 connect_timeout(较小) 和 read_timeout 测试的
    7 条回复    2020-05-04 23:15:22 +08:00
    gaojin
        1
    gaojin  
       2020-05-04 22:27:12 +08:00
    提供个思路。。。可以看看 squid 、nginx 这些是如何验证某个 ip 的质量的
    ClericPy
        2
    ClericPy  
    OP
       2020-05-04 22:30:32 +08:00
    @gaojin #1 感谢, 之前看的都是一些挺一般的代码...
    feelinglucky
        3
    feelinglucky  
       2020-05-04 22:36:50 +08:00
    https://github.com/mingcheng/proxypool 看看我写的?

    其实很简单,开个定时器去轮询检查就可以了。不过不知道你想要用什么技术栈实现,例如 golang 就有原生的代理库支持,所以不用想那么多。
    ClericPy
        4
    ClericPy  
    OP
       2020-05-04 22:53:03 +08:00
    @feelinglucky #3 不是轮询什么的问题, 就只谈验证一个 IP 的健康度, 有什么除了挂上代理真正请求一次以外的其他思路, 可以节省流量而且足够快, 结果又是准确的. golang 的正好最近在学, 我看一下试试
    feelinglucky
        5
    feelinglucky  
       2020-05-04 23:01:07 +08:00   1
    @ClericPy https://github.com/mingcheng/proxypool/blob/master/model/proxy.go#L66

    节省流量角度考虑的话,先看下端口是不是开放,然后测试 HTTP 拿头和 Response Code 是不是 200 就 OK
    了。

    其实,个人觉得这个场景下可用的代理也是有时效性的,所以即便检查了使用的时候也有可能跪了,因此拿到 IP 列表的时候进行弱检查就可以了,使用的时候设置重试切换次数。
    oott123
        6
    oott123  
       2020-05-04 23:12:15 +08:00   2
    别的不知道,但你要响应足够小,可以试试:

    g.cn/generate_204
    www.google.com/generate_204
    www.qualcomm.cn/generate_204

    都是支持 http / https 的,而且都很能扛并发
    ClericPy
        7
    ClericPy  
    OP
       2020-05-04 23:15:22 +08:00
    @oott123 #6 哈哈, 太好了, 连蔷外也可以
    @feelinglucky #5 嗯, 一开始说的用内置 socket 就是验证端口能否连接

    非常感谢二位, 要的就是这些思路
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2555 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 20ms UTC 12:56 PVG 20:56 LAX 04:56 JFK 07:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86