Thema: HTTP Proxy Grabber
- 
	06.01.2012, 16:20 #1Permanent gesperrt  
 - Registriert seit
- 22.05.2012
- Beiträge
- 202
 Thanked 21 Times in 9 Posts HTTP Proxy Grabber
				Have Fun.PHP-Code: HTTP Proxy Grabber
				Have Fun.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<String> proxies = Proxylist(100); // 100 Proxies laden
 if (proxies != null) // wenn die Liste null ist, gabs wohl einen Fehler...
 for (int i = 0; i < proxies.Count; i++)
 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<String> Proxylist(int count)
 {
 try
 {
 List<String> proxylist = 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 = 0; i < source.Length; i++)
 {
 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 = 0; j < pageCount * 20 - 20; j += 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;
 }
 }
 }
 }
   
 
- 
	03.02.2012, 12:46 #2Mitglied  
 - Registriert seit
- 31.01.2011
- Beiträge
- 52
 Thanked 106 Times in 41 Posts HTTP Proxy Grabber
				Warum für jeden Durchlauf eine neue Instanz der Klasse WebClient erstellen? :sPHP-Code: HTTP Proxy Grabber
				Warum für jeden Durchlauf eine neue Instanz der Klasse WebClient erstellen? :sPHP-Code:for (int j = 0; j < pageCount * 20 - 20; j += 20)
 {
 String proxyContent = new WebClient().DownloadString(String.Format("http://www.proxybase.de/de/list-{0}.htm", j));
 ...
 
 Du instanzisiert doch ganz oben schon einen WebClient, speicher dir die Instanz und benutz sie unten auch.
 
 
 Für jeden Schleifendurchlauf den Regex neu compilen lassen :o!PHP-Code:foreach (Match m in Regex.Matches(proxyContent, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,6}"))
 
 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:
 War jetzt auswending geschrieben, aber so in etwa.PHP-Code:public static readonly Regex myregex = new Regex(".+?", RegexOptions.Compiled);
 
 Das wird sich deutlich bemerkbar machen wenn du den Vergleich stoppst.
 
 Auch nicht schön.PHP-Code:while (loadThread.IsAlive) ;
 
 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
 
- 
	03.02.2012, 18:31 #3Permanent gesperrt  
 - Registriert seit
- 22.05.2012
- Beiträge
- 202
 Thanked 21 Times in 9 Posts HTTP Proxy Grabber HTTP Proxy GrabberDanke 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
- 
  Win7 [S] Proxy GrabberVon eXtrac3 im Forum WindowsAntworten: 0Letzter Beitrag: 20.07.2012, 19:25
- 
  [Vorstellung] http://Localhost/Von Localhost im Forum UserankündigungenAntworten: 8Letzter Beitrag: 11.04.2012, 03:06
- 
  http://www.libertyreserve.com/Von Scanner im Forum Internet und TechnikAntworten: 2Letzter Beitrag: 06.12.2011, 19:33
- 
  Eigener HTTP ProxyVon Frankfurt am Main im Forum AndereAntworten: 3Letzter Beitrag: 19.11.2011, 23:24
- 
  [PHP] User mit HTTP Proxy "aussperren"Von Comu im Forum PHPAntworten: 1Letzter Beitrag: 19.11.2011, 15:26
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.
 
									 
														 
														 
					
					
					
						 Zitieren
  Zitieren