Accéder à une page WEB en PERL

Fermé
Bilbemir - 28 août 2022 à 18:27
[Dal] Messages postés 6182 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 22 mai 2024 - 4 janv. 2023 à 14:28

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

A voir également:

2 réponses

[Dal] Messages postés 6182 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 22 mai 2024 1 084
23 sept. 2022 à 10:01

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 ?

0
Bilbemir Messages postés 2 Date d'inscription mercredi 14 octobre 2015 Statut Membre Dernière intervention 4 janvier 2023
4 janv. 2023 à 14:01

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

0
[Dal] Messages postés 6182 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 22 mai 2024 1 084
4 janv. 2023 à 14:28

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.

0