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

Apache Discussion :

Effectuer une requête sans navigateur


Sujet :

Apache

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut appel au serveur sans saisir manuellement l'URL dans le navigateur
    Bonjour,

    Est-il possible de soumettre une requête à un serveur apache et de recevoir la réponse SANS PASSER par un navigateur ?
    Mon problème est que l'utilisateur doit pouvoir questionner une base de donnée depuis un environnement de programmation genre borland, ou dev (dans mon cas c'est IDL pour ceux qui connaissent) , en appellant une fonction: en lui donnant en argument la requête et en récupérant la réponse. Donc il faudrait qu'elle envoir ca directement au serveur sans passer par le navigateur qui serait obligé d'ouvrir une page internet! Dans mon cas, aucune page internet ne doit s'ouvrir..

    Est-ce possible ? si oui, comment ?

    Merci !!

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est quel langage de programmation ? Il faut effectuer une requête HTTP complète. Y a des API pour faire dans différents langages. Pour Java, le package HttpClient d'Apache est pas mal.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Cest le langage du même nom : IDL (interactive data langage), langage beaucoup utilisé en astronomie, il est proche du FORTRAN.
    Il faut donc que je fasse une 'requête HTTP complète' ?
    Ca consiste à faire quoi exactement .. ?

    Merci

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Ben, ça dépend de ce que tu veux faire comme requête. Si c'est juste un simple appel d'URL, c'est pas trop compliqué. Pour faire un POST, c'est plus délicat. Va voir ici, le protocole HTTP est expliqué. Si tu peux trouver des API qui font tout le boulot, c'est carrément mieux. Sinon, faut que tu ouvres un socket TCP sur le serveur (port 80 s'il ne figure pas dans l'URL), puis tu envoies une série de lignes (<CR> signifie "saut de ligne") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GET /rep/mapage.html HTTP/1.0<CR>
    Host: www.monsite.com<CR>
    <CR>
    Après ça, tu récupères la réponse du serveur. Elle est en 2 parties : les en-têtes et le corps de la réponse. Ce qui t'intéresse se trouve dans le corps de la réponse mais il faut toujours regarder les en-têtes pour savoir si la requête a bien été traitée, s'il y a une redirection, etc. Pour ton cas, ce n'est peut-être pas nécessaire mais il faut quand même vérifier que le statut est bien 200.

    Je t'encourage à t'entraîner d'abord en faisant un telnet, histoire de bien comprendre comment marche le protocole et surtout l'histoire du saut de ligne vide après le dernier en-tête de ta requête.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Okay,
    Merci pour tout ca, je vais regarder. Ma requête doit être une requête de type SQL, pour que le serveur questionne à son tour une base de donnée. Après, le résultat doit être retransmis à IDL, en sortie de la fonction IDL que j'aurai implémentée..
    Ca correspond à ton 'POST' ?

    a+

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    POST, c'est comme les formulaires : il y a GET où tout passe dans l'URL, et il y a POST où on voit rien dans l'URL.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Effectuer une requête sans navigateur
    Bonjour !

    J'ai une question simple :
    j'ai un serveur apache+PHP sur cet ordi. comment je fais pour acceder aux données qu'il ya sur ce serveur depuis un autre ordi, SANS utiliser le navigateur ?
    autrement dit écrire un client qui puisse demander une requête au serveur qui est sur cette machine..

    Merci.
    pieutr

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    C'est à votre programme de se comporter comme un client HTTP : donc d'utiliser et respecter ce protocole pour effectuer des requêtes et traiter les réponses. Vous pouvez gérer tous ces aspects vous-mêmes (sockets) mais c'est assez laborieux ou opter pour des bibliothèques pour vous simplifier la tâche. Ça dépend de votre langage mais on peut citer cURL (initialement C) qui possède de très nombreux "wrappers" pour d'autres langages (PHP, Ruby, ...) - et qui ne se limite pas au protocole HTTP(S).

  9. #9
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Par exemple, si tu veux accéder à des données stockées en base de données, tu as 2 solutions : soit le client se connecte directement à la base de données (avec le driver qui va bien) et fait ses requêtes, soit il passe par Apache (il fait un appel HTTP à un script) qui fait la requête pour lui et lui renvoie le résultat de la requête dans un certain format (XML vraisemblablement). Pour le second cas, c'est comme je disais au début et comme l'explique Julp, il faut que ton client se comporte comme un navigateur et fasse une requête HTTP sur Apache.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    D'accord, mais ceci m'ammène à me poser 2 nouvelles questions :

    - Si on poursuit cet exemple de connection à une base de donnée, en employant la 2eme méthode : Connection à apache d'abord. La requête SQL désirée par le client sera t-elle mise dans le corps de la requête HTTP qu'il envoie?

    - Que fait le client distant, concrètement, pour se connecter à mon serveur apache ? doit-il écrire la requête HTTP lui même ? Par ce que dans ce cas, si tous les clients qui veulent acceder à mon webservice doivent écrire une requête HTTP !! on s'en sort plus..

    Merci !
    pieutr

  11. #11
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par pieutr Voir le message
    - Si on poursuit cet exemple de connection à une base de donnée, en employant la 2eme méthode : Connection à apache d'abord. La requête SQL désirée par le client sera t-elle mise dans le corps de la requête HTTP qu'il envoie?
    Pas forcément : quand tu fais une recherche sur les pages jaunes, tu ne tapes pas spécialement la requête SQL de recherche, elle est construite pour toi. Tout dépend de ce que tu veux faire : soit tu veux faire de l'ultra générique et dans ce cas il faut peut-être effectivement envisager que la requête SQL à effectuer soit fournie par le client, soit tu fais tu spécifique (un script pour faire telle requête, tel autre script pour faire telle autre requête), dans ce cas ton client n'a qu'à fournir la liste des paramètres, exactement comme sur une page HTML standard qui traite un formulaire, sauf que c'est pas un navigateur qui envoie les données et qu'en retour, la réponse n'est pas forcément en HTML, si tu vois ce que je veux dire.

    Citation Envoyé par pieutr Voir le message
    - Que fait le client distant, concrètement, pour se connecter à mon serveur apache ? doit-il écrire la requête HTTP lui même ? Par ce que dans ce cas, si tous les clients qui veulent acceder à mon webservice doivent écrire une requête HTTP !! on s'en sort plus..
    C'est un peu le principe des Web services, donc si on s'en sort !! Mais relis nos réponses : dans tous les cas, oui, faut passer par une requête HTTP complète. Mais tu n'es pas obligé de faire tout le travail toi-même : en fonction de ton langage de programmation, il existe des API pour te faciliter le travail.

    Si tu cherches vraiment à faire du vrai Web service, c'est autre chose d'un peu plus compliqué car il faut que le client parle le Web service (de nouveau, passe par des API existantes) mais aussi que le serveur (i.e. la cible de l'appel Web service, pas Apache) soit compatible Web service et de nouveau ici aussi, y a tout un tas d'API qui existent pour créer des Web services.

    Maintenant, faut que tu saches exactement ce que tu veux faire : si ton besoin est interne, c'est-à-dire que tu maîtrises totalement le ou les clients et le serveur. Dans ce cas, autant écrire un truc simple pas dans le standard Web service, ça sera plus simple. Mais si tu veux ouvrir ton service à d'autres clients, il faut effectivement envisager d'écrire un vrai Web service.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  12. #12
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Salut, et merci vraiment de prendre le temps de me répondre..

    Je vois bien ce que tu veux dire, et en parallèle je cherche des API du type de celles que tu m'as dit.

    Ce que je dois faire c'est du 'spécifique' comme tu dis, c'est à dire que le web service aura seulement quelques méthodes du type 'afficher tous les filaments de tel jour' ou bien 'remonter à l'origine de ce filament', etc.. et puis le web service doit-être ouvert à une multitude de clients que je ne connaitrai pas forcément, donc pas en interne. Ce qui veut dire faire du 'vrai web service'. Par ailleurs la partie client et la partie serveur seront toutes 2 codées en php.

    Si tu cherches vraiment à faire du vrai Web service, c'est autre chose d'un peu plus compliqué car il faut que le client parle le Web service
    Mais par exemple pour les pages jaunes : La machine du client 'lambda' ne parle pas web service à priori ! Pourtant pas de problème..

    -Dans ce que tu as dit, je ne comprend pas pourquoi la cible de l'appel au web service ne pourrait-elle pas être un serveur apache ? (typiquement, c'est quoi ?) mais ca c'est pas trop grave encore, voila ce qui je pense est le plus important que je comprenne :

    -En fait nous notre web service doit être semblable à celui des pages jaunes sauf que le client ne doit pas passer par un navigateur pour envoyer la requête HTTP complète car le but est d'automatiser l'appel au web service ! (Sur la machine du client, le choix de la requête SQL à effectuer est renvoyée par une méthode C++ , et à partir de la, l'appel au web service doit être enclenché automatiquement) donc comment le client pourrait-il envoyer (et recevoir) les données sans navigateur ? Concrètement comment fait-il ..?


    Merci..
    pieutr

  13. #13
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour faire des Web services avec PHP, vois pour utiliser un package PEAR, ça t'aidera grandement. Lis également des tutoriels, comme celui-ci.

    Citation Envoyé par pieutr Voir le message
    Ce que je dois faire c'est du 'spécifique' comme tu dis, c'est à dire que le web service aura seulement quelques méthodes du type 'afficher tous les filaments de tel jour' ou bien 'remonter à l'origine de ce filament', etc.
    C'est généralement comme cela qu'on procède car l'idée est de masquer la logique métier qui se cache derrière un service Web : si tu écris un service Web qui prend en entrée une requête SQL, tu supposes que le client connaît la base de données donc le métier, ce qui n'est pas vraiment le principe. Mais la vraie réponse est fournie par la conception : si c'est déjà prévu dans ton cas que le client fournisse la requête SQL à faire, ton service Web devra prendre cette requête SQL, l'exécuter et renvoyer le résultat dans un certain format.

    Citation Envoyé par pieutr Voir le message
    Mais par exemple pour les pages jaunes : La machine du client 'lambda' ne parle pas web service à priori ! Pourtant pas de problème..
    Parce que là, c'est du Web classique HTML utilisable avec un navigateur, pas du vrai Web service. Les pages jaunes doivent proposer des (vrais) Web services mais ça doit être payant et on y accède autrement qu'avec un navigateur.

    Citation Envoyé par pieutr Voir le message
    -Dans ce que tu as dit, je ne comprend pas pourquoi la cible de l'appel au web service ne pourrait-elle pas être un serveur apache ? (typiquement, c'est quoi ?)
    Le point d'entrée, c'est Apache, mais Apache seul ne sait pas gérer les services Web. Il te faut nécessairement derrière un outil de programmation tel qu'un serveur J2EE, un moteur de servlet, PHP, Python, etc.

    Citation Envoyé par pieutr Voir le message
    donc comment le client pourrait-il envoyer (et recevoir) les données sans navigateur ? Concrètement comment fait-il ..?
    Es-tu allé lire le site que je donnais en référence dans ma seconde réponse ? Relis également la réponse de Julp :
    Citation Envoyé par Julp
    Vous pouvez gérer tous ces aspects vous-mêmes (sockets) mais c'est assez laborieux ou opter pour des bibliothèques pour vous simplifier la tâche.
    Basiquement, HTTP fonctionne en ouvrant un socket TCP sur un certain port et en envoyant les en-têtes et le contenu qui va bien. Mais ça, c'est du tout premier niveau. Utiliser un service Web, c'est surtout envoyer un contenu qui a un format bien précis. C'est pour ça qu'il est très franchement préférable de passer par des API toutes faites qui faciliteront l'écriture du contenu à envoyer, l'établissement de la connexion, l'envoi de la requête, le traitement de la réponse, etc. Je suis certain que des API services Web existent en C++, faut juste les trouver.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

Discussions similaires

  1. tester la validité d'une requête sans l'effectuer
    Par Jasmine80 dans le forum SGBD
    Réponses: 7
    Dernier message: 01/06/2012, 14h44
  2. Effectuer une requête
    Par Telemak dans le forum Bases de données
    Réponses: 23
    Dernier message: 19/06/2006, 13h28
  3. Réponses: 6
    Dernier message: 09/06/2006, 18h22
  4. RecordSource avec une requête sans résultat
    Par temar dans le forum Access
    Réponses: 4
    Dernier message: 23/05/2006, 18h13
  5. Exécution d'une requête sans stocker les transactions
    Par Actarus69 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 24/03/2006, 12h45

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