Accéder à une page WEB en PERL
[Dal] Messages postés 6373 Statut Contributeur -
Bonjour,
Je voudrais, dans un script PERL accéder à une page WEB, en récupérer le source, puis en "mouliner" le contenu à ma façon.
C'est en fait quelque chose que je fais assez régulièrement grâce au module LWP d'une façon simple, efficace et qui convient tout à fait à mes besoins , avec des scripts du style :
use LWP::Simple qw(get);
my $html_EG = " URL ";
my $htmlEG = get($html_EG);
Et (en principe !!) ... $htmlEG contient tout ce que je veux.
Sauf que, aujourd'hui, avec cet URL : https://foe-data.ovh/world/fr13/classementeg
le script me renvoie systématiquement l'erreur suivante :
++++++++
Page non disponible
La page https://foe-data.ovh/world/fr13/classementeg n'a pu Ûtre tÚlÚchargÚe - erreur Bad file descriptor
++++++++
et, je ne m'en sors pas ... Serait-ce le tiret dans l'URL qui provoque cette erreur ?
Merci d'avance pour vos réponses !
Windows / Firefox 104.0
- Lwp::protocol::https
- Supprimer une page word - Guide
- Web office - Guide
- Comment traduire une page web - Guide
- Capturer une page web complète - Guide
- Créer une page web - Guide
2 réponses
Désolé, je ne vois ton message que maintenant.
Le tiret ne devrait poser absolument aucun problème.
Dans les distributions récentes de libwww-perl, le support de https nécessite l'installation du module séparé LWP::Protocol::https
https://metacpan.org/release/ETHER/libwww-perl-6.36/source/README.SSL
As-tu installé ce module depuis CPAN ?
Bonjour,
A mon tour d'avoir longuement trainé pour te répondre !
Ayant pour finir trouvé la solution, je la poste telle quelle
En fait j'ai testé ta proposition, mais cela n'a rien changé. J'ai encore beaucoup cherché et suis maintenant sur une autre piste.
Ce pourrait être un problème de certificat, non valide ? non reconnu ?
Si cela s'avère exact, il faudrait que je bypasse la validation SSL (bien que ce soit peu recommandé, mais bon ...)
Je viens de trouver .....
Il faut forcer la variable verify_hostname à 0
use LWP::UserAgent;
use HTTP::Request::Common qw(GET);
my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0 }, );
my $req_EG = GET 'https://www.forge-db.com/fr/fr13/guilds/?server=fr13&world=Noarsil';
my $res_EG = $ua->request($req_EG);
Cordialement
Pas de problème, merci pour ton retour :-)
En fait, la documentation du module LWP::Protocol::https
https://metacpan.org/pod/LWP::Protocol::https#DESCRIPTION
indique que la vérification des certificats se fait avec les certificats racine installés par le module Mozilla::CA (sauf à indiquer dans ssl_opts des SSL_ca_file et SSL_ca_path alternatifs que tu indiques toi même). Si tu ne fais ni l'un, ni l'autre, LWP::Protocol::https n'est effectivement pas en mesure de vérifier le certificat.
Si tu veux vérifier les certificats des sites auxquels tu te connectes, le plus simple est d'installer Mozilla::CA et tu devrais pouvoir retirer "verify_hostname => 0" de tes paramètres ssl_opts.