#!/usr/bin/python
# _*_ coding:utf-8 _*_
# Copyright: GPLv2
# From: RossWan(mrwlwan@gmail.com)

import sys
import urllib
import socket
import re
import time

def getProxies():
    """Get all proxies from web site"""
    sock = urllib.urlopen('http://www.proxycn.com/html_proxy/30fastproxy-1.html')
    html = sock.read()
    sock.close()
    proxyRe = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,4}')
    proxies = set(proxyRe.findall(html))
    return list(proxies)

def testProxy(targetUrl,proxy):
    """Test a proxy"""
    try:
        proxies = {'http':'http://'+proxy}
        sock = urllib.urlopen(targetUrl,proxies=proxies)
        html = sock.read()
        sock.close()
        if len(html):
            return True
    except:
        return False

if __name__ == '__main__':
    targetUrl = len(sys.argv)==1 and 'http://www.google.cn' or sys.argv[1]
    print 'Target Url: ',targetUrl
    proxyList = []
    proxies = getProxies()
    socket.setdefaulttimeout(5.0)
    for proxy in proxies:
        start = time.time()
        result = testProxy(targetUrl,proxy)
        end = time.time()
        if result:
            print proxy,' spends ',end-start,' seconds.'
            proxyList.append((end-start,proxy))
    proxyList.sort()
    print '\n\nThe  fast proxies:'
    for i in proxyList:
        print i[1]

