récupéré le code source de plusieurs pages [perl] - Perl - Programmation
Marsh Posté le 13-08-2005 à 22:04:04
il faut que tu ferme et réouvre ton socket (connection close)
pourkoi n'utilise tu pas simplement LWP::simple?
Code :
|
Marsh Posté le 13-08-2005 à 22:59:40
parce que je n'arive pas a se qu'il utilise ma regex avec lwp::simple regex + la boucle
#!usr/bin/perl -w
use LWP::Simple;
$source = get("http://www.samair.ru/proxy/" );
print "$source\n"
Marsh Posté le 13-08-2005 à 23:23:10
j'aimerai récupéré tout les proxy ainsi que leur port présent entre la balisse <pre> </pre> (quand tu regard la source de la page) mais pas uniquement dans la page numéro 1 (proxy-0.1.htm) mais dans toute les page cad de la page proxy-01.htm a proxy-20.htm
merci.
Marsh Posté le 13-08-2005 à 23:23:55
tiens, un exemple qui met les ips dans un tableau pour les pages de proxy-01 (index) à proxy-20 :
Code :
|
Marsh Posté le 13-08-2005 à 23:25:42
ha merde il manquait les ports!
Code :
|
Marsh Posté le 13-08-2005 à 23:27:59
merci énormément
maitenant que je viend e tester je vai essailler de comprendre ton code sinon sa servirai a rien
merci encore si j'ai encore d'autre question je les posterai ici.
edit: esque tu pourait me comenter ceci stp :
Code :
|
Marsh Posté le 13-08-2005 à 23:36:07
c'est equivalent à ca:
Code :
|
et maintenant pour expliquer ca:
quand tu execute la regexp en contexte de liste (c'est à dire en l'assignant à une liste ou à un push), elle te retourne tous les bloques capturés (entre parenthese, si il n'y a pas un "?:" en debut de bloque).
le modifier 'g' (en fin de regexp) permet de capturer toutes les expression qui match, pas seulement la premiere, et donc de retourner une liste (cette list contient en fait $1, $2, etc...)
Marsh Posté le 14-08-2005 à 12:44:20
bonjour. voila mon programme est terminer.
il y a juste que pour pinger les proxy sa prend du temps quand meme.
Code :
|
ps: il y a encore pas mal de chose a ajouter et a amélioré mais je les meterai dans uen prochaine version
Marsh Posté le 14-08-2005 à 13:58:24
pourkoi tu met des sleep (??! bizare comme phrase!) ?
pour tes ping, il doit y avoir moyen d'en faire plusieurs en //.
Il me semble que le sujet avait deja été abordé ici il y a kk temps.
Deja tu peu le faire avec POE:
http://search.cpan.org/~rcaputo/PO [...] 04/Ping.pm
mais bon POE n'est pas tres facile d'acces...
sinon tu peux te debrouiller en forkant (si t'es sous linux), mais faudra pouvoir recuperer le resultat apres...
le module Async pourrait t'etre utile (il est un peu buggué mais pour ce que tu veux ca devrait aller) :
http://search.cpan.org/~mjd/Async-0.10/Async.pm
en gros tu te fais une dizaine d'objet Async et tu leur balance les Net::Ping, et ensuite tu regarde qui a fini => si tu a un resultat tu rebalance un autre async à la place (pour maintenir le pool) et ainsi de suite. Il y a meme un timeout il me semble sur ce module.
Et puis finalement en fait c'est pas vraiment le ping qui t'interesse: tu t'en fout qu'ils repondent à l'ICMP. Ce que tu veux en fait c'est savoir si tu va pouvoir te connecter en HTTP.
Dans ce cas tu peux remplacer tes ping par des ouvertures de connexion TCP et voila!
la c'est plus simple: tu utilise directement le module Socket (pas IO::Socket) et tu le met en mode nonbloquant (il y a des modules pour faire ca, mais sinon c'est assez simple de toutes facon) juste apres sa creation. Ensuite tu tente la connexion (non bloquante) et tu fais pareil pour une dizaine d'autre adresse la aussi. Ensuite tu utilise IO::Select pour voir quels socket sont connecté (writable)
Marsh Posté le 14-08-2005 à 14:02:23
d'accord merci et les sleep ses comme les wait ses pour qu'il attente un peu lol sa sert a rien mais comme sa on a le temps de lire les print "..."
et j'utilise les ping pour en faite tester si les proxy sont dead ou aps et aussi pour voir le temps de réponse (ms) .
merci beaucoup en tout cas
Marsh Posté le 14-08-2005 à 14:23:07
avec des connexions tcp tu aura aussi le temps de réponse, et ca sera bcp plus fiable: ce que tu veux c'est savoir si tu va pouvoir te connecter en HTTP ou pas, et en combien de temps.
un proxy peu tres bien repondre à un ping (tres vite) alors qu'il va refuser des connexions HTTP (ou etre tres lent) si il est chargé. A l'inverse, il peu refuser les ping et accepter des connexions HTTP.
Marsh Posté le 14-08-2005 à 16:24:22
la windows j'ai acheter un nouveau pc il y a pas longtemps et je n'ai aps encore installer linux.
donc windows
Marsh Posté le 14-08-2005 à 16:46:17
tiens cadeau (en ce moment je me fait chier, mais j'ai plein de travaux à faire chez moi, donc je prefere glander devant mon PC plutot que d'empiller des carreaux de platre...)
Code :
|
Marsh Posté le 13-08-2005 à 19:15:21
bonjour.
je me lance dans le perl depuis quelque jour en lisant des ebook sur des sites internet.
et voici mon tout premier projet dont je bloque un peu.
(c'est de récupéré les page d'un site web (la source) toutes les information qui se trouve entre la balise <pre> </pre> sa fonctionne bien mais je n'arive pas a se qu'il m'afiche sa a toute les page du site cad de la page /proxy/index.php a /proxy/proxy-20.htm.
voila mon code (la il afiche la source de l'index entre la balise <pre> </pre> mais aps des autre page je ne sait pas comment faire j'ai esailler avec uen boucle for mais je n'y suis aps ariver)
#!usr/bin/perl -w
use IO::Socket;
$url = "www.samair.ru";
$socket = IO::Socket::INET->new( Proto => "tcp",
PeerAddr => "$url",
PeerPort => "80" );
print $socket "GET /proxy/index.php HTTP/1.1\nHost: $url:80\nConnection: Close\n\n";
while (my $ligne = <$socket> ){
if ($ligne =~ /(\d+).(\d+).(\d+).(\d+)\S+)/gi) {
print ("ip: $1.$2.$3.$4 port: $5\n" );
}
else {
}
}
aidez moi svp, merci d'avance.
Message édité par K0rN111 le 13-08-2005 à 19:16:41