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

Format d'échange (XML, JSON...) Java Discussion :

Comment envoyer une requête avec HttpClient et récupérer son résultat en XML


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Comment envoyer une requête avec HttpClient et récupérer son résultat en XML
    Bonjour,

    J'aimerais savoir comment poster une requette HTTP et récupérer la réponse on utilisant httpClient. Je voudrais poster une requette httpà un serveur via httpClient et qui va me retourner une réponse sous format XML comme résultat aussi.
    Merci de votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu trouveras une documentation (avec un exemple de post) ici : http://hc.apache.org/httpcomponents-...uickstart.html.

    Sur la réponse tu peux récupérer ton résultat par l'instance de HttpEntity en xml par sa méthode getContent() qui retourne un InputStream que tu pourras injecter dans le parser XML de ton choix.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Bonjour
    Merci pour ta réponse Joel.
    Je vais jeter un coup d' œil.
    Ma deuxième question c' est comment faire une requête qui envoie de fichier zip dans le serveur tomcat en http client. Ce fichier se trouve en local.
    C est a dire, c est un programme qui envoie de requête automatique a chaque fois qu' i y a nouveau fichier.
    Je te remercie.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Dans le quickstart, tu as un un exemple d'envoi de fichier : http://hc.apache.org/httpcomponents-...tFormPost.java
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Bonjour
    Merci pour ta réponse Joel,

    Mais je ne vois, comment on précise le chemin ou on récupère ou en trouve le fichier dans mon pc. C est ça qui me pose de problème vraiment.

    Si tu as une idée, suis toujours prenant :-)

    Merci encore à toi

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    il n'y a pas à trouver le fichier bien sûr, tu ne peux pas deviner où il se trouve et aucune application non plus... soit tu sais où il se trouve (c'est imposé, c'est un dossier de spool, c'est un emplacement standard, etc.), soit tu le demandes à l'utilisateur (il le passe par paramètre au lancement de l'application (comme dans l'exemple du quickstart), ou alors il le saisit dans un formulaire, etc...), ou toute autre moyen de détermination.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Rebonjour Joel
    J' ai vu, le lien que tu m 'a montré ((http://hc.apache.org/httpcomponents-...tFormPost.java
    J ai telechargé les différents librairie
    Apres, j' ai fait de copie collé le code :


    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
    18
    19
    20
    21
    22
    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpGet httpGet = new HttpGet("http://targethost/homepage");
    CloseableHttpResponse response1 = httpclient.execute(httpGet);
     
     
    try {
        System.out.println(response1.getStatusLine());
        HttpEntity entity1 = response1.getEntity();
        // do something useful with the response body
        // and ensure it is fully consumed
        EntityUtils.consume(entity1);
    } finally {
        response1.close();
    }
     
    HttpPost httpPost = new HttpPost("http://targethost/login");
    List <NameValuePair> nvps = new ArrayList <NameValuePair>();
    nvps.add(new BasicNameValuePair("username", "vip"));
    nvps.add(new BasicNameValuePair("password", "secret"));
    httpPost.setEntity(new UrlEncodedFormEntity(nvps));
    CloseableHttpResponse response2 = httpclient.execute(httpPost);
    .close();
    ......



    Et quand je l' exécute avec le serveur , ca fait:

    ==> Etat HTTP 404 -

    --------------------------------------------------------------------------------

    type Rapport d''état

    message

    description La ressource demandée () n'est pas disponible.


    --------------------------------------------------------------------------------

    Apache Tomcat/7.0.12


    Je ne sais pas si tu as une idée

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Dans l'exemple, il utilise une URL bidon "http:/targethost/login" que tu dois remplacer par ton URL, sous la forme :

    http://<ton adresse ip à toi ou ton nom de domaine>:<le port d'écoute de ton serveur>/<le nom de ta page ou servlet>


    Si ton serveur est sur ton poste, et que le tomcat est démarré sur le port 8080 et que ton nom de page ou servlet c'est homepage, ce sera "http://localhost:8080/homepage".

    Au passage, tu as copié l'exemple du GET et du POST. Les deux sont à la suite l'un de l'autre : le premier c'est le get, avec HttpGet, comme "http get", et le second c'est le post, avec HttpPost, comme "http post"). Tu n'as besoin que du post évidemment.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup pour ton explication Joel

    :-)

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Bonsoir Joel
    Je tiens tjrs a te remercier, tu m ' a vraiment aidé, grâce à toi je vois maintenant comme fonctionne ce truc

    Ma question maintenant: supposons que j' utilise un serveur qui n est pas local, je fais comment pour le communiquer. Comment je renseigne le informations en http client (le port du serveur , mot de passe etc) .

    Je te remercie

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Pour l'authentification, il y faut juste changer la façon de créer l'instance de CloseableHttpClient. Exemple ici.

    Pour un serveur distant, c'est exactement pareil que pour un serveur local : il suffit de mettre la bonne URL en paramètre.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Bonsoir Joel
    Merci beaucoup Joel

    A propos de l' envoie d' un fichier dans le serveur,

    J' ai une page jsp , cette page sert pour uploader


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     <head>
            <title>Upload Servlet 3.0</title>
        </head>
        <body>
            <form action="../upload" method="post" enctype="multipart/form-data">
                <label for="file">Fichiers : </label>
                <input type="file" id="file1" name="file1">
                <input type="submit" value="Envoyer">
            </form>
            <c:if test="${not empty part.name}">
                <br/>Fichier ${parts.file.name} upload&eacute; avec succ&egrave;s!
            </c:if>
        </body>
    son url => http://localhost:8080/MEDIATHEQUE-war/pages/upload.jsp

    Pour le traitement = j' ai une servlet derriere

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @WebServlet(urlPatterns={"/upload"})
    @MultipartConfig(location="C:\\Users\\sangdou\\Desktop\\repupload", maxFileSize=10485760L) // 10Mo.
    public class Upload extends HttpServlet {
     
        // parametres de l’upload
        .....
    Voila le scénario:
    1) un client lance la page , il cherche son fichier dans son répertoire
    2) il clique le bouton validé une fois il trouve son fichier
    3) le serveur reçoit ce fichier et le stock dans un répertoire ( C:\\repupload)

    Mon soucis ce que j ' essaie de faire un test de requête en httpclient mais je n arrive pas.
    C' est à dire d ' envoyer ce fichier httpclient
    J' ai bien regardé le lien que tu m' a donné => http://hc.apache.org/httpcomponents-...tFormPost.java
    j 'ai essayé mais je tourne en rond.

    Je ne sais pas si tu vois ce que je veux dire

    Merci Joel

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Donc tu as une application web, avec une page html avec formulaire qui communique avec une servlet pour uploader un fichier.

    Ce que tu dois faire c'est simuler cette page web, donc simuler le fonctionnement du formulaire. L'URL que tu dois joindre c'est donc l'URL de la servlet. Le fichier à passer en paramètre doit avoir le même nom que dans le formulaire (file1 donc).

    Dans l'exemple, on voit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    HttpEntity reqEntity = MultipartEntityBuilder.create()
                        .addPart("bin", bin)
                        .addPart("comment", comment)
                        .build();
    Ici on passe 2 paramètres, appelé bin et comment. Et bien toi tu as juste à faire à la place:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HttpEntity reqEntity = MultipartEntityBuilder.create()
                        .addPart("file1", bin)
                        .build();

    En ce qui concerne l'authentification, il faut voir quel type d'authentification le site web met en place; Est-ce juste une page avec un formulaire qui poste 2 champs, user et password avec une servlet qui valide, ou est-ce un système d'authentification genre basic auth, digest, oauth ou que sais-je.

    Pour une page avec formulaire, tu auras juste à simuler la navigation en quelque sort, en faisant une première requête vers la servlet de validation du login puis appeler l'autre servlet avec la même instance de HttpClient. Pour que le JSessionID persiste entre les deux appels, il faudra utiliser un CookieStore. SI tu regardes le premier lien que je t'ai donnée, il y a un lien vers des tutoriaux : le chapitre 3.5 donne un exemple pour mettre en place le cookiestore.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Bonsoir Joel
    Je te remercie pour tes réponses, c est gentil de ta part

    Les pages ne sont pas encore sécurisé donc il y a pas de soucis pour ca pour l' instant.

    Mais j' ai toujours la même soucis par rapport au httpclient de Upload

    La page jsp c est tjr la même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     <form action="../upload" method="post" enctype="multipart/form-data">
                <label for="file">Fichiers : </label>
                <input type="file" id="file1" name="file1">
                <input type="file" id="file2" name="file2">
                <input type="submit" value="Envoyer">
            </form>
    url de la page :

    Servlet de traitement:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    @WebServlet(urlPatterns={"/upload"})
    @MultipartConfig(location="C:\\Users\\sangdou\\Desktop\\repupload", maxFileSize=10485760L) // 10Mo.
    public class Upload extends HttpServlet {
     
        // parametres de l’upload
        private static final int TAILLE_BUFFER=10240;
        private static final String TYPE_CONTENU="content-disposition";
        private static final String NOM_TYPE_CONTENU="filename";
        private static final boolean MODE_MULTIPART=true;
     
        protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
        {
            // parcourir chaque paramètre reçu
            for (Part p: request.getParts())
            {
               String typeContenu=p.getContentType();
               if(typeContenu!=null)
               {
                  // upload
                  Part part=this.uploadFichier(p);
                  request.setAttribute("part", part);
               }
            }
            // retour sur la page d’upload
            request.getRequestDispatcher("/upload.jsp").forward(request, 
    response);
        }
     
        // affichage de la page de chargement
        protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
        {
            request.getRequestDispatcher("/upload.jsp").forward(request, response);
        }
     
        // upload du fichier
        private Part uploadFichier(Part part) throws IOException
        {
            // retrouver le nom du fichier uploadé
            String filename=this.getNomFichier(part);
            // mise en forme du nom
            String prefix=filename;
            String suffix="";
            if (filename.contains(".")) {
                prefix=filename.substring(0, filename.lastIndexOf('.'));
                suffix=filename.substring(filename.lastIndexOf('.'));
            }
            // écrire le fichier
            File file=File.createTempFile(prefix + "_", suffix, new File(this.getClass().getAnnotation(MultipartConfig.class).location()));
     
            // copie simple
            if (MODE_MULTIPART) {
                part.write(file.getName());
            }
            // copie streaming
            else
            {
                InputStream input = null;
                OutputStream output = null;
                try {
                    input = new BufferedInputStream(part.getInputStream(), TAILLE_BUFFER);
                    output = new BufferedOutputStream(new FileOutputStream(file), TAILLE_BUFFER);
                    byte[] buffer = new byte[TAILLE_BUFFER];
                    for (int length = 0; ((length = input.read(buffer)) > 0);) 
    {
                        output.write(buffer, 0, length);
                    }
    url servlet :http://localhost:8080/MEDIATHEQUE-war/upload


    Code pour le http client
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    public class ClientMultipartFormPost {
     
        public static void main(String[] args) throws Exception {
            if (args.length != 1)  {
                System.exit(1);
            }
            CloseableHttpClient httpclient = HttpClients.createDefault();
            try {
                HttpPost httppost = new HttpPost("http://localhost:8080/MEDIATHEQUE-war/upload");
     
     
     
                FileBody bin = new FileBody(new File("C://Users//sangdou//Desktop//Document.zip"));           //REPERTOIRE DE FICHIER A ENVOYER
                StringBody  comment= new StringBody("A binary file of some kind", ContentType.TEXT_HTML);
     
                HttpEntity reqEntity = MultipartEntityBuilder.create()
                        .addPart("file1", bin)
                        .addPart("file2", comment)
                        .build();
     
     
                httppost.setEntity(reqEntity);
     
                System.out.println("executing request " + httppost.getRequestLine());
                CloseableHttpResponse response = httpclient.execute(httppost);
                try {
                    System.out.println("----------------------------------------");
                    System.out.println(response.getStatusLine());
                    HttpEntity resEntity = response.getEntity();
                    if (resEntity != null) {
                        System.out.println("Response content length: " + resEntity.getContentLength());
                    }
                    EntityUtils.consume(resEntity);
                } finally {
                    response.close();
                }
            } finally {
                httpclient.close();
            }
        }

    Resultat d' executiop:

    run:
    C:\Users\sangdou\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
    BUILD FAILED (total time: 2 seconds)


    Je ne sais pas c est ou le problème en fait.
    Si tu as une idée.

    Je te remercie.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Bonsoir Joel
    J' ai modifié un peu le code:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public static void main(String[] args) throws Exception {
     
            CloseableHttpClient httpclient = HttpClients.createDefault();
            try {
                HttpPost httppost = new HttpPost("http://localhost:8080/MEDIATHEQUE-war/upload");
     
     
                FileBody file1 = new FileBody(new File("C://Users//sangdou//Desktop//Document.zip"));
                StringBody  file2= new StringBody("A binary file of some kind", ContentType.TEXT_HTML);
     
     
                HttpEntity reqEntity = MultipartEntityBuilder.create()
                        .addPart("file1", file1)
                        .addPart("file2", file2)
                        .build();
     
     
     
     
                httppost.setEntity(reqEntity);
     
     
                System.out.println("executing request " + httppost.getRequestLine());
                CloseableHttpResponse response = httpclient.execute(httppost);
                try {
                    System.out.println("----------------------------------------");
                    System.out.println(response.getStatusLine());
                    HttpEntity resEntity = response.getEntity();
                    if (resEntity != null) {
                        System.out.println("Response content length: " + resEntity.getContentLength());
                    }
                    EntityUtils.consume(resEntity);

    QUAND JE L EXECUTE, ca fait:

    run
    executing request POST http://localhost:8080/MEDIATHEQUE-war/upload HTTP/1.1
    ----------------------------------------
    HTTP/1.1 404 Not Found
    Response content length: 1086
    BUILD SUCCESSFUL (total time: 7 seconds)

    Il trouve pas la page,je vois pas il est ou le pepin

    Si tu as une idée sur ça.

    Merci :-) !!!!

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Une 404 signifie qu'il n'y a pas de ressource à l'URL demandée. Si tu entres l'URL du formulaire dans un navigateur, tu ontiens quelque chose ou une 404. Et pour l'URL de la servlet ? Le serveur est démarré au moins ?

    Par ailleurs, poiurquoi ce n'est pas le même formulaire dans tes 2 messages ? Un a 2 input de type file et l'autre un seul. Il faudrait savoir et adapter le code d'appel (dans ton code d'appel, tu passes un seul file et une string en second paramètre.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Bonjour Joel
    Enfait, je veux envoyer deux fichier a la fois, donc j' ai modifié aussi la page jsp en dux file
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <input type="file" id="file1" name="file1">
    <input type="file" id="file2" name="file2">
    Quand je lance cette page , l' upload passe , il y a pas d' erreur.

    Pareil pour l' url de la servlet, il y a pas de soucis quand je la lance.

    Maintenant, dans le httpclient:

    -j' ai corrigé le paramètre , j ai modifié le paramétré string comme tu as vue en file donc ca devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    FileBody file1 = new FileBody(new File("C://Users//sangdou//Desktop//Document.zip"));
                FileBody file2 = new FileBody(new File("C://Users//sangdou//Desktop//a.zip"));
     
                HttpEntity reqEntity = MultipartEntityBuilder.create()
                        .addPart("file1", file1)
                        .addPart("file2", file2)
                        .build();
    Quand je l' exécute , ca m' dux erreur,

    soit :
    executing request POST http://localhost:8080/MEDIATHEQUE-war/upload HTTP/1.1
    ----------------------------------------
    HTTP/1.1 404 Not Found
    Response content length: 1086

    soit :
    executing request POST http://localhost:8080/MEDIATHEQUE-war/upload HTTP/1.1
    ----------------------------------------
    HTTP/1.1 500 Internal Server Error
    Response content length: 0

    Je redémarre le serveur, mais ca regle pas le probleme

    Par contre, lorsque j' utilise un seul paremetre:

    code jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="file" id="file1" name="file1">
    code servlet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    FileBody file1 = new FileBody(new File("C://Users//sangdou//Desktop//Document.zip"));
     
                HttpEntity reqEntity = MultipartEntityBuilder.create()
                        .addPart("file1", file1)
                        .build();
    Ca marche tres bien:

    executing request POST http://localhost:8080/MEDIATHEQUE-war/upload HTTP/1.1
    ----------------------------------------
    HTTP/1.1 200 OK
    Response content length: -1
    BUILD SUCCESSFUL (total time: 12 seconds)

    Je sais pas si tu vois le soucis

    Je te remercie

    Cdt

  18. #18
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il faudrait regarder les traces d'exception dans le log ou la console du serveur.

    En revanche, ça fait un bail que je n'ai pas fait de servlet, mais je trouve chelou le forward vers la servlet elle-même à la fin du post. L'upload fonctionne via un navigateur ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. comment faire une requête avec une association porteuse de données
    Par gaelle95 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 25/11/2009, 15h49
  2. Réponses: 6
    Dernier message: 11/07/2008, 09h34
  3. Réponses: 2
    Dernier message: 03/05/2006, 17h00
  4. [ABAP] Comment créer une requête avec jointure
    Par roadster62 dans le forum SAP
    Réponses: 1
    Dernier message: 21/02/2006, 16h04
  5. Comment envoyer une requête POST via HTTP ?
    Par pdtor dans le forum C++
    Réponses: 2
    Dernier message: 13/09/2005, 05h54

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