IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Lire un fichier distant avec une requete


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 74
    Points : 46
    Points
    46
    Par défaut Lire un fichier distant avec une requete
    Bonjour,

    Mon problème est le suivant. Je voudrais charger des photos satellite en IR, pour cela j'ai l'adresse et le nom, mais le nom est en fonction de l'heure et des minutes (toujours en xxh00, xxh15, xxh30 et xxh45), et des secondes, c'est la que ça coince car la valeur des secondes est un peu aléatoire. Pour palier cela, il y a une page ou il y a la liste des noms complets des images. Je voudrais donc ouvrir ce fichier, et explorer dedans pour aller chercher les noms corrects. Mon problème est que en javascript, la gestion de fichier c'est pas facile. J'ai donc fait cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://rammb.cira.colostate.edu/ramsdis/online/archive.asp?data_folder=rmtc/rmtcsasec1ir404', true);
     
    // If specified, responseType must be empty string or "text"
    xhr.responseType = 'text';
     
    xhr.onload = function () {
        if (xhr.readyState === xhr.DONE) {
            if (xhr.status === 200) {
                console.log(xhr.response);
                console.log(xhr.responseText);
            }
        }
    };
     
    xhr.send(null);
    Dans la console j'ai le message suivant:

    Blocage d’une requête multiorigines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://rammb.cira.colostate.edu/rams...mtcsasec1ir404. Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant.

    Je sais vaguement l'origine, mais je ne sais pas comment contourner cela. A moins qu'il y ait une autre methode pour lire ce fichier distant.
    Merci de votre aide

    Michel

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    le message "Blocage d’une requête multiorigines" signifie que le serveur n'autorise pas la lecture de la page en JavaScript.

    pour lire cette page vous aurez besoin d'utiliser un langage côté serveur comme du PHP par exemple :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu = file_get_contents("http://rammb.cira.colostate.edu/...");

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    Mon problème alors va etre de récuper le contenu d'une variable PHP dans javascript!!

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    si vous avez un soucis avec du code PHP, il vaut mieux que vous créez une nouvelle question dans un des forums suivants :
    https://www.developpez.net/forums/f443/php/

  5. #5
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Citation Envoyé par mathieu Voir le message
    le message "Blocage d’une requête multiorigines" signifie que le serveur n'autorise pas la lecture de la page en JavaScript.
    non, c'est pas ça, le message dit
    la politique « Same Origin » ne permet pas de consulter la ressource...
    ça veut dire qu'il refuse d'aller consulter des données sur un autre serveur que le sien, parce qu'il applique la politique du tout doit avoir la même origine que lui (« Same Origin » )

    dans la réalité ça veut dire qu'il n'accepte pas d'aller consulter des données sur un autre serveur que celui sur lequel il est connecté.
    sauf si à mettre en place un mécanisme CORS « Access-Control-Allow-Origin »

    Sinon lire une info du serveur sur un navigateur internet ça se fait très bien avec une requête Ajax (donc en JavaScript coté navigateur)
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  6. #6
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    PS, c'est quoi
    des photos satellite en IR
    ?
    Et est-ce que vous avez des photos satellite utilisant d'autres lettres de l'alphabet, genre des photos satellite BZU, ou GLM ???
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  7. #7
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 874
    Points : 3 721
    Points
    3 721
    Par défaut
    Citation Envoyé par psychadelic Voir le message
    Sinon lire une info du serveur sur un navigateur internet ça se fait très bien avec une requête Ajax (donc en JavaScript coté navigateur)
    Les requêtes ajax ne sont-elle pas bloquées si les pages ont un domaine différent ?

    Cette question de Same-origin policy est revenue plusieurs fois dans le forum, exemple : #7 ou avec les iframes, par exemple ici : #14 j'avais réussi sans serveur en désactivant la sécurité du navigateur (mais c'était en local).

    Mais si un site bloque l’accès, il y a une raison, peut-être qu'ils veulent que leurs ressources soient accessibles seulement si on va sur leur site ???

  8. #8
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Citation Envoyé par Beginner. Voir le message
    1 => Les requêtes ajax ne sont-elles pas bloquées si les pages ont un domaine différent ?

    2 => Mais si un site bloque l’accès, il y a une raison, peut-être qu'ils veulent que leurs ressources soient accessibles seulement si on va sur leur site ???
    1=> bien sur que oui et c'est justement son probleme
    2=> Non, les sites ne bloquent pas leurs accès spécifiquement; c'est juste que les navigateurs se protégent d'avoir des acces à X sites différents sur la même page, sauf à mettre en place une autorisation CORS.

    Dans ce genre de cas c'est au serveur d'aller rechercher les infos sur le site étranger, et à les recopier pour le client sur son navigateur,
    mais pour que le serveur sache ou aller chercher l'info que le client demande, celui-ci lui envoie une requête Ajax avec cette info, pour qu'il puisse faire ce taf et lui renvoie les données qu'il recherche
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  9. #9
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 874
    Points : 3 721
    Points
    3 721
    Par défaut
    Merci. Ok donc c'est bien ce que j'avais compris... A une époque j'avais besoin d'avoir accès à certains fichiers en local et le navigateur refusait alors je m'en suis sorti sans serveur (car j'y connais rien en serveur) en ajoutant une option au navigateur...

    Sinon je pensais que certains pouvaient bloquer les requêtes ajax par exemple pour nous imposer d'aller sur leur site pour accéder à leur ressources, en tous cas je crois bien qu'il y a une option pour empêcher qu'une page soit chargée dans une iframe...

  10. #10
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    on va dire oui pour ton raisonnement, mais ici le massage est clair « Same Origin » ça veut bien dire « mêmes Origines » donc du même serveur.
    C'est plus une question de sécurité.
    Quand tu te branche sur un serveur comme par exemple ici sur le serveur de dvp, c'est parce que tu lui donne une confiance pour ce qu'il peut renvoyer, et pas à un mix de X serveurs différents pour composer ta page à lire.
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    Images IR veut dire Infra Rouge, comme cela on voit les nuages même la nuit.
    En bref faudrait que je mettes en place un mécanisme CORS, je ne sais pas faire, ou alors j'essaie de récupérer via PHP, puis je transmets à JS.
    Je ne suis pas arrivé encore!!
    Michel

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    Dernières nouvelles. J'ai fait d'abord cela en php:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
        $Passe= file_get_contents("http://rammb.cira.colostate.edu/ramsdis/online/archive.asp?data_folder=rmtc/rmtcsasec1ir404");
    ?>
    Puis cela en JS:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    var Passe = <?php echo json_encode($Passe); ?>;

    Apparemment cela marche. Maintenant faut que j'arrive à extraire ligne par ligne de la variable Passe qui contient une page entière de code.

  13. #13
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 112
    Points
    44 112
    Par défaut
    Bonjour,
    ou alors j'essaie de récupérer via PHP, ...
    exactement c'est ce que t'a dit mathieu, un peu plus haut, il n'y a rien de bien compliqué et tu peux te servir coté serveur (PHP) de la classe DOMDocument par exemple
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $doc = new DOMDocument();
    $doc->loadHTMLFile( $url);
    il te suffira ensuite de récupérer les liens concernés et de les retourner côté client.

  14. #14
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    il y a plusieurs étapes*:

    1 – sur le serveur récupérer le contenu html de la page du serveur distant
    => en php il faut utiliser la bibliotheque CURL
    2 _ toujours sur le serveur et en php donc prélever la liste des des url de photo
    => c’est une sorte de parsing classique, il y a des tas de parsers en open source pour ce genre de chose, ou alors en faire un simplifié pour juste aller spécifiquement tes données.

    3 _ fournir cette liste sur une page html pour permettre de cocher les images à récupérer

    => soit un simple formulaire et une page retour avec tes photos IR,
    soit une requête Ajax, mais c’est un peu se compliquer la vie pour peu de choses

    4 _ en retour avec le PHP récupérer les dites photo du serveur distant et les copier sur le serveur, puis fabriquer la page avec les photos concernées.

    Bon, c’est sur, comme le temps de réponse entre les étapes 3 et 4 peut être lent, avec une requete ajax on peut lancer une attente annimé genre sablier, et éventuellement récupérer un code d’erreur si quelque chose coince, genre le serveur distant est en panne, etc..

    C’est ça, ou j’ai tout compris de travers*??
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    Bonsoir,
    C'est tout bon. Je recupere effectivement en PHP l'integral de la page, puis en javascript j'extrait les noms d'image et je fais l'animation:
    http://astrosurf.com/Team-Janus/meteo/index.php

    Merci à tous

  16. #16
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 112
    Points
    44 112
    Par défaut
    Euh pourquoi ne pas faire déjà le tri côté serveur en ne récupérant que les liens qui concernent les images, la recherche serait moins aléatoire me semble t-il que ton Index_Nom=Passe.indexOf("margin: 10px auto;",0) !


    Citation Envoyé par psychadelic
    => en php il faut utiliser la bibliotheque CURL
    pas forcément comme je l'ai mentionné plus avant
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $doc = new DOMDocument();
    $doc->loadHTMLFile( $url);
    $liens = $dom->getElementsByTagName('a');

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ouvrir un fichier distant avec une adresse ip
    Par nina_23 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 29/04/2010, 10h15
  2. [PHP 4] [PHP 4.4.1] probleme pour lire un fichier distant avec CURL
    Par seben dans le forum Langage
    Réponses: 6
    Dernier message: 27/11/2009, 08h38
  3. Réponses: 3
    Dernier message: 05/03/2007, 23h54
  4. Lire un fichier distant avec SSH
    Par Fritzoune dans le forum Langage
    Réponses: 3
    Dernier message: 06/09/2006, 11h24
  5. ouvrir un fichier Excel avec une requete perso
    Par legillou dans le forum Access
    Réponses: 9
    Dernier message: 21/06/2005, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo