Thema: HTTP Proxy Grabber
-
06.01.2012, 16:20 #1
- Registriert seit
- 22.05.2012
- Beiträge
- 202
Thanked 21 Times in 9 PostsHTTP 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<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 #2
- Registriert seit
- 31.01.2011
- Beiträge
- 52
Thanked 106 Times in 41 PostsHTTP Proxy Grabber
PHP-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.
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:
PHP-Code:public static readonly Regex myregex = new Regex(".+?", RegexOptions.Compiled);
Das wird sich deutlich bemerkbar machen wenn du den Vergleich stoppst.
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 #3
- Registriert seit
- 22.05.2012
- Beiträge
- 202
Thanked 21 Times in 9 PostsHTTP 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
-
Win7 [S] Proxy Grabber
Von 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 Proxy
Von 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.