python 代理服务器 身份验证_python3 写的代理服务器验证工具

由于经常要使用代理服务器,而网上提供的代理服务器很多都是临时的,一个一个的手动验证费时费力,所以我就想用python3的urllib库来写一个服务器获取、验证工具。

首先,要找一个提供代理服务器的网站,我用的是http://5uproxy.net/,这个网站的代理服务器几乎每天都更新,所以效果应该是比较好的。我的思路是,先打开这个网站的页面,将页面的信息down下来,然后用正则表达式分析,找出其中的代理服务器和端口号,再用urllib.request.build_opener构造一个使用该代理服务器的opener,然后用这个opener去打开百度的页面,探测获取到的信息是否正确,如果正确,就说明代理服务器有效,输出代理服务器的IP、端口即可。

#!/usr/bin/env python

#coding=utf-8

import urllib

import http.cookiejar

import re

import socket

class OpenUrl:

def __init__(self):

self.result = ""

def openpage(self): # url为相对路径

try:

url = "http://www.baidu.com"

self.result = self.opener.open(url).read().decode("gb2312")

except urllib.error.HTTPError as ex :

self.mute.release()

self.result = "openpage error: %s"%ex

return False

except ssl.SSLError as ex:

self.mute.release()

self.result = "openage error: %s"%ex

return False

return self.result.find("京ICP证030173号")

def getHtmlTdInfo(self, context):

result = []

p = re.compile("/d{1,3}/./d{1,3}/./d{1,3}/./d{1,3}[/w|/W]+?/d{2,4}")

ret = p.findall(str(context))

if ret is None:

return None

for x in ret:

element = []

q = re.compile("^(/d{1,3}/./d{1,3}/./d{1,3}/./d{1,3})[/w|/W]+?(/d{2,4}){1}quot;)

subRet = q.search(x);

if subRet==None:

continue

element.append(subRet.group(1))

element.append(subRet.group(2))

result.append(element)

return result

def getAgencyIP(self,url=""):

socket.setdefaulttimeout(20) #20秒内没有打开web页面,就算超时

url="http://5uproxy.net/http_fast.html" #获取最新代理服务器

self.result = str(urllib.request.urlopen(url).read())

if self.result==None:

return

AgencyIP = self.getHtmlTdInfo(self.result)

print(len(AgencyIP))

url="http://5uproxy.net/http_anonymous.html" #获取匿名访问代理服务器

self.result = str(urllib.request.urlopen(url).read())

if self.result==None:

return

AgencyIP += self.getHtmlTdInfo(self.result)

print(len(AgencyIP))

url="http://5uproxy.net/http_non_anonymous.html" #获取透明访问代理服务器

self.result = str(urllib.request.urlopen(url).read())

if self.result==None:

return

AgencyIP += self.getHtmlTdInfo(self.result)

print(len(AgencyIP))

socket.setdefaulttimeout(5) #5内没有打开web页面,就算超时

if len(AgencyIP)==0:

print("获取代理服务器失败")

return

for x in AgencyIP:

if x[0]=="":

continue

try:

proxy_support = urllib.request.ProxyHandler({'http':'http://'+str(x[0])+':'+str(x[1])})

self.opener = urllib.request.build_opener(proxy_support, urllib.request.HTTPHandler)

urllib.request.install_opener(self.opener)

if self.openpage()==False:

x[0] = ""

x[1] = ""

continue

print("有效的代理服务器"+str(x[0])+":"+str(x[1]))

print("等待2秒")

time.sleep(2)

except:

continue

if __name__ == "__main__":

test = OpenUrl()

test.getAgencyIP()

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved.

京ICP备09083238号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值