1. #1

    Registriert seit
    22.05.2012
    Beiträge
    202
    Thanked 21 Times in 9 Posts

    Standard HTTP Proxy Grabber

    PHP-Code:
    /*
             ____  __.  _________            .__        __   
            |    |/ _| /   _____/ ___________|__|______/  |_ 
            |      <   \_____  \_/ ___\_  __ \  \____ \   __\
            |    |  \  /        \  \___|  | \/  |  |_> >  |  
            |____|__ \/_______  /\___  >__|  |__|   __/|__|  
                    \/        \/     \/         |__|          
            
            HTTP PROXY GRABBER
            © The Don of NYC - 2012
     */

    using System;
    using System.Net;
    using System.Threading;
    using System.Collections.Generic;
    using System.Text.RegularExpressions;

    namespace 
    HttpProxyGrabber
    {
        class 
    Program
        
    {
            static 
    void Main()
            {
                
    Console.Title "HTTP Proxy Grabber by The Don of NYC";

                List<
    Stringproxies Proxylist(100); // 100 Proxies laden

                
    if (proxies != null// wenn die Liste null ist, gabs wohl einen Fehler...
                    
    for (int i 0proxies.Counti++)
                        
    Console.WriteLine(proxies[i]); // und ausgeben

                
    Console.ReadLine();
            }

            
    /// <summary>
            /// Gibt eine Liste mit HTTP Proxies zurück
            /// </summary>
            /// <param name="count">Anzahl der Proxies</param>
            /// <returns>HTTP Proxylist</returns>
            
    private static List<StringProxylist(int count)
            {
                try
                {
                    List<
    Stringproxylist = new List<String>();

                    
    Thread loadThread = new Thread(delegate()
                    {
                        
    String[] source = new WebClient().DownloadString("http://www.proxybase.de/de/list-0.htm").Split('\n');
                        
    int pageCount 0;

                        
    // Vorhandene Seiten auslesen
                        
    for (int i 0source.Lengthi++)
                        {
                            if (
    source[i].Contains("http://www.proxybase.de/de/list-0.htm" style"))
                            {
                                pageCount = int.Parse(source[i].Substring(source[i].LastIndexOf("">"
    )).Split('>')[1].Split('<')[0]);
                                break;
                            }
                        }

                        for (
    int j 0pageCount 20 20+= 20)
                        {
                            
    String proxyContent = new WebClient().DownloadString(String.Format("http://www.proxybase.de/de/list-{0}.htm"j));

                            foreach (
    Match m in Regex.Matches(proxyContent, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,6}"))
                            {
                                if (!
    proxylist.Contains(m.Value)) // wenn der Proxy noch nicht hinzugefügt wurde
                                    
    proxylist.Add(m.Value); // fügen wir diesen hinzu

                                
    if (proxylist.Count == count// prüfen ob wir schon die angegebene Anzahl erreicht haben 
                                    
    break;
                            }
                        }
                    });

                    
    loadThread.Start();
                    while (
    loadThread.IsAlive) ; // warten bis alles geladen bzw. der Thread ausgefüht wurde...

                    
    return proxylist// Liste mit den hinzugefügten HTTP Proxies zurückgeben
                
    }
                catch (
    Exception ex)
                {
                    
    Console.WriteLine(ex.ToString());
                    return 
    null;
                }
            }
        }

    Have Fun.

  2. #2

    Registriert seit
    31.01.2011
    Beiträge
    52
    Thanked 106 Times in 41 Posts

    Standard HTTP Proxy Grabber

    PHP-Code:
    for (int j 0pageCount 20 20+= 20)
    {
        
    String proxyContent = new WebClient().DownloadString(String.Format("http://www.proxybase.de/de/list-{0}.htm"j));
    ... 
    Warum für jeden Durchlauf eine neue Instanz der Klasse WebClient erstellen? :s
    Du instanzisiert doch ganz oben schon einen WebClient, speicher dir die Instanz und benutz sie unten auch.


    PHP-Code:
    foreach (Match m in Regex.Matches(proxyContent, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,6}")) 
    Für jeden Schleifendurchlauf den Regex neu compilen lassen :o!
    Das ist sehr(!) performanz aufwending.
    Instanzier den Regex in deiner Klasse als static readonly, du willst ihn ja nicht während der Laufzeit verändern, und durch static readonly wird er anderst gespeichert als andere Variablen.
    Geb ihm als Regex Optionen das Paramter "Compiled" mit, daddurch dauert es länger den Regex zu komplimieren (was wenn du ihn wie oben erklärt deklarierst nur einmal passiert), aber wesentlich kürzer den Regex anzuwenden (jeder schleifendurchlauf).

    Sprich:
    PHP-Code:
    public static readonly Regex myregex = new Regex(".+?"RegexOptions.Compiled); 
    War jetzt auswending geschrieben, aber so in etwa.
    Das wird sich deutlich bemerkbar machen wenn du den Vergleich stoppst.

    PHP-Code:
    while (loadThread.IsAlive) ; 
    Auch nicht schön.
    Braucht wieder viel Perfomanz, bessere Möglichkeit:
    AutoResetEvent-Klasse (System.Threading)

    Du schaust immer ohne (!) Pause ob der Thread noch läuft.
    Das AutoResetEvent hat wenn ich mich recht erinnere eine Methode WaitOne, nach dem Aufruf der Methode wird dein Code erst in die nächste Zeile springen wenn du beim Multithreading in einem anderem Thread die Methode Set aufrufst.
    WaitOne bringt auch die Möglichkeit ein TimeOut mitzugeben, so kannst du Fehler behandeln.


    cheers,
    aspire

  3. #3

    Registriert seit
    22.05.2012
    Beiträge
    202
    Thanked 21 Times in 9 Posts

    Standard HTTP Proxy Grabber

    Danke für deine Kritik. So wie Du es vorgeschlagen hast, wäre es um einigermaßen sauberer und schöner aber einen Unterschied bei der Performance habe ich bei mir nicht wirklich gemerkt. Der Unterschied beträgt lediglich 300-500 Millisekunden bei 1000 Proxies, also ist das eigentlich akzeptabel.

Ähnliche Themen

  1. Win7 [S] Proxy Grabber
    Von eXtrac3 im Forum Windows
    Antworten: 0
    Letzter Beitrag: 20.07.2012, 19:25
  2. [Vorstellung] http://Localhost/
    Von Localhost im Forum Userankündigungen
    Antworten: 8
    Letzter Beitrag: 11.04.2012, 03:06
  3. http://www.libertyreserve.com/
    Von Scanner im Forum Internet und Technik
    Antworten: 2
    Letzter Beitrag: 06.12.2011, 19:33
  4. Eigener HTTP Proxy
    Von Frankfurt am Main im Forum Andere
    Antworten: 3
    Letzter Beitrag: 19.11.2011, 23:24
  5. Antworten: 1
    Letzter Beitrag: 19.11.2011, 15:26
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.