zoukankan      html  css  js  c++  java
  • 代理服务器验证工具

    这里提供的是使用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]+?<td width=/"60/">/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()
  • 相关阅读:
    [古城子的房子] 贪心
    [小兔的棋盘] 组合数学
    [Triangle] Fibonacci+二分查找
    [Fibonacci] 矩阵快速幂
    [DP?]素数筛+Lucas定理+费马小定理
    react本地开发关闭eslint检查
    react 不同js文件里公用同一个变量
    js学习笔记
    node内存扩展,前端项目运行时报内存不足的错误
    Gitee码云通过WebHooks实现自动同步代码部署
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468637.html
Copyright © 2011-2022 走看看