当前位置:首页 > CN2资讯 > 正文内容

selenium Python 代理 读取不到代理端口 python http代理服务器

11小时前CN2资讯


用CONNECT方法突破HTTP代理服务器的扩展名封锁(python) [转]


公司里的电脑是通过一台内部代理服务器上网的,为了节省带宽,对下载进行了限制。方法是过滤URL中的扩展名,如'exe','rar','tar.gz'等,并且限制了连接时间,当连接时间超过2分钟就主动断开。这样平常就只能看看网页了,要下载就要申请,非常麻烦。虽说可以通过“问号大法”来解决URL过滤,wget来解决断点续传,但这样还是不好,下大一点的文件或网速慢一点时,要断线好几十次。一次偶然的机会发现公司的代理服务器没有限制CONNECT命令,哈哈,终于可以解决下载问题了。

通过向代理服务器发送CONNECT命令,可以让代理服务器和目标主机的目标端口建立一个连接,这样本机和目标主机就有了一个通道。从此以后向代理服务器发送命令就等于向目标主机发送命令。这和一般的GET方式不同,完全不受过滤机制的影响。先来看看两种方式的不同之处,

GET方式:

socket.connect('HTTP代理服务器IP',HTTP代理服务器端口) socket.send('GET http://XXX.XXX.XXX/XXX.EXE HTTP/1.1\r\n HOST: XXX.XXX.XXX\r\n\r\n')



CONNECT方式:


socket.connect('HTTP代理服务器IP',HTTP代理服务器端口) socket.send('CONNECT XXX.XXX.XXX:80 HTTP/1.1\r\n\r\n') socket.recv(1024) socket.send('GET /XXX.EXE HTTP/1.1\r\n HOST: XXX.XXX.XXX\r\n\r\n')



就是这么简单,下面就用python来完成编码。python有很多对http协议的封装库,如urllib2,httplib等。但我不知urllib2如何设置connect方式的代理,懒得去研究了。所以直接用socket来实现。相对于C++,用python来操作socket是如此的简单优雅。


pget.py:


import socket import sys #如果参数<1则显示信息 if len(sys.argv)<2: print 'proxyGet v0.3 \n\ Written by Wangfan\n\ Powered by Python 2.5\n\n\ Usage:\n\ pget [URL]' sys.exit() #URL处理函数,得到文件名、HOST、GET请求 def parseURL(url): url=url.split('/') file_name=url[-1].strip() host=url[2] del url[0] del url[0] del url[0] header_get='/'+'/'.join(url) return (file_name,host,header_get) urlInfo=parseURL(sys.argv[1]) print '***pget v0.3***\n\n\ File Name: %s\n\ From: %s\n\ GET: %s\n\ ' %(urlInfo[0],urlInfo[1],urlInfo[2]) #确认可以开始下载 input_char=raw_input('ok?(press "y" to start,press other to exit):') if input_char!='y': sys.exit() #初始化socket s=socket.socket() #连接代理服务器 s.connect(('10.100.1.206',3128)) #发送CONNECT命令,连接目标主机 s.send('CONNECT '+urlInfo[1]+':80 HTTP/1.1\n\n') #得到回应 print 'Proxy:',s.recv(1024).strip() #发送下载请求和头信息 s.send('GET '+urlInfo[2]+' HTTP/1.1\r\n\ Host: '+urlInfo[1]+'\r\n\ User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3\r\n\ Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n\ Accept-Language: en-us,en;q=0.5\r\n\ Accept-Encoding: gzip,deflate\r\n\ Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n\ Keep-Alive: 300\r\n\ Proxy-Connection: keep-alive\r\n\r\n') r='' headers='' content_length=0 header_end=False #循环读取,处理回应的头信息和内容 while True: r+=s.recv(1) downloaded=len(r) if header_end==False: if r.find('\r\n\r\n')!=-1: headers=r.split('\r\n\r\n')[0] print headers for header in headers.split('\r\n'): if header.split(':')[0]=='Content-Length': content_length=int(header.split(':')[-1]) if header.split(':')[0]=='Location': sys.exit() r='' header_end=True if content_length==0: sys.exit() if downloaded%1024==0: #输出下载进度 print '\r[',int((downloaded/1024)/float(content_length/1024)*100),'%]',downloaded/1024,'KB /',content_length/1024,'KB', #如果已下载的内容长度等于头信息中长度则跳出 if downloaded==content_length: break #保存文件 fp=open(urlInfo[0],'wb') fp.write(r) fp.close() s.close() sys.exit()




由于不想占用过多的带宽,所以没有加入多线程。但是,可以扩展的地方还有很多,比如断点续传等,以后有空再完善吧,先做个可以用的原型:)

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24264.html

    分享给朋友:

    “selenium Python 代理 读取不到代理端口 python http代理服务器” 的相关文章

    如何选择国内免费服务器?全面指南与推荐

    国内免费服务器概述 在当今数字化快速发展的时代,云计算的普及正以前所未有的速度改变着我们的工作和生活方式。国内云服务器市场也随着这股潮流不断壮大,越来越多的云服务提供商进入市场,尝试用优惠的价格吸引用户。尤其是对于那些刚起步的开发者和小型企业而言,国内免费服务器的出现无疑为他们提供了一个很好的机会。...

    深度解析韩国makemodel:传统与现代结合的时尚理念

    markdown格式的内容 韩国makemodel概念 谈到韩国makemodel,我首先感受到了它所传递的深厚文化底蕴。这一时尚理念融合了传统与现代,不仅仅是对衣物的设计,更是一种对韩国文化的致敬。它通过巧妙的配搭,将历史悠久的韩服元素与现代流行趋势相结合,创造出一种独特的美学风格。每一件作品都像...

    详细指南:如何进行Linux扩容以解决存储不足问题

    什么是Linux扩容? 在使用Linux操作系统时,随着数据的增加,我们常常面临磁盘空间不足的问题。Linux扩容就是通过添加新的磁盘、扩展现有磁盘容量或利用逻辑卷管理(LVM)等方式,来增加系统的存储空间。扩容可以帮助我更好地管理数据,提高服务器的运行效率。 我记得第一次接触扩容时,面对不断增加的...

    VPS论坛:虚拟主机爱好者的交流与学习平台

    VPS论坛概述 VPS论坛是一个专为VPS主机爱好者提供交流与分享的平台。在这里,像我这样对VPS感兴趣的人们,可以参与关于虚拟专用服务器的各种讨论。VPS实际上属于一个相对小众的领域,因此知名的VPS论坛数量较少,但它们所承载的信息和交流却是丰富多彩的。这些论坛不仅是获取信息的重要来源,更是与其他...

    便宜日本VPS的选择与比较:性价比高的供应商推荐

    在当今数字化时代,VPS(虚拟专用服务器)正成为许多企业和个人的首选解决方案,尤其是在日本市场。对于那些需要可靠网络服务的用户来说,这无疑是一个非常实用的选择。日本的VPS服务以其高性能和稳定性著称,深受开发者、小型企业、网站管理员等用户的喜爱。 日本VPS的定义并不复杂,简单来说,它是一种虚拟化技...

    服务器租用的全面指南:如何选择和管理最合适的服务器

    1. 服务器租用概述 服务器租用是许多企业和个人在建设网站或部署应用时的首选方式,指的是用户支付一定的费用来获得服务器的使用权。这样的模式让用户不需要高额的初始投资,可以随时按需租用相应配置的服务器。这在当今快速发展的数字时代尤为重要,无论是初创企业还是成熟企业,都能从中获得灵活性和成本效益。 想象...