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

Entrée/Sortie Java Discussion :

Problème de POST HTTP et de réponse


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Problème de POST HTTP et de réponse
    Bonjour a tous,

    depuis une semaine déjà je rame un peu et malgré plusieurs recherche je n'arrive pas a résoudre mon souci.
    en gros voila, de bric et de broc j'essaie en vain de faire une requête http post sur un site afin de recuperer des informations (ici des NOTAMs terrains pour ce qui connaisse l'aéronautique )

    Quand j'effectue cette demande par le site postman, j'arrive a obtenir les infos que je souhaite.
    quand je transpose et code cette requete en java via NETBEANs IDE 11.1, je n'arrive pas a obtenir ce que je veux.

    je précise que je souhaite le résultat sous forme de xml pour plus tard le traiter et en extraire juste les infos finales.

    pourriez vous me dire ce qui ne va pas dans mon code s'il vous plait?

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package httpsrequesttest;
     
    import java.io.BufferedReader;
    //import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import javax.net.ssl.HttpsURLConnection;
    import java.net.URL;
     
    public class HttpURLConnectionExample {
     
    	//private static final String USER_AGENT = "google";
            private static final String ICAO = "LFBO LFMK";
            private static final String REPORTTYPE = "Raw";
            private static final String ACTIONTYPE = "notamRetrievalByICAOs";
            private static final String BUTTON = "Check All NOTAMs";
            private static final String SUBMIT = "View NOTAMs";
     
    	private static final String POST_URL = "https://www.notams.faa.gov/dinsQueryWeb/queryRetrievalMapAction.do";
     
    	private static final String POST_PARAMS = "POST";
     
    	public static void main(String[] args) throws IOException {
     
    		sendPOST();
    		System.out.println("POST DONE");
    	}
     
    	private static void sendPOST() throws IOException {
    		URL obj = new URL(POST_URL);
    		HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
    		con.setRequestMethod("POST");
    		//con.setRequestProperty("User-Agent", USER_AGENT);
                    con.setRequestProperty("retrieveLocId", ICAO );
                    con.setRequestProperty("reporType", REPORTTYPE );
                    con.setRequestProperty("actionType", ACTIONTYPE );
                    con.setRequestProperty("button", BUTTON );
                    con.setRequestProperty("submit", SUBMIT );
                    con.
     
    		// For POST only - START
    		con.setDoOutput(true);
                try //(DataOutputStream os = new DataOutputStream( con.getOutputStream())) {
                    // wr.write(POST_PARAMS);
     
     
     
                    (OutputStream os = con.getOutputStream()) {
                    os.write(POST_PARAMS.getBytes());
                    //os.flush();
                    // For POST only - END
                }
     
    		int responseCode = con.getResponseCode();
    		System.out.println("POST Response Code :: " + responseCode);
     
    		if (HttpsURLConnection.HTTP_OK == responseCode) { 			StringBuffer response;
                    try ( //success
                            BufferedReader in = new BufferedReader(new InputStreamReader(
                                    con.getInputStream()))) {
                        String inputLine;
                        response = new StringBuffer();
                        while ((inputLine = in.readLine()) != null) {
                            response.append(inputLine);
                        }
                    }
     
                    //print result
                    System.out.println(response.toString());
                    } else {
                        System.out.println("POST request not worked");
                    }
    	}
     
        void sendGet() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
     
        void sendPost() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
     
    }


    il me sort bien un résultat mais pas ce que je souhaite.

    J'ai pourtant bien inspecter la page web pour en récupérer les bonnes "KEY" et "VALUE" mais je pense que j'ai zappé une code.

    Par avance merci pour votre aide.

    Amicalement

  2. #2
    Modérateur

    Salut,

    Cela me semble plus être un problème de requête par rapport à ce que le site traite que de Java. Encore que dans ton code, les paramètres sont mal transmis. En tout cas la réponse obtenue est du html pas du xml... La réponse que tu obtiens sous postman est du xml ? Est-ce que tu peux nous montrer la requête faite sous postman, en curl par exemple.

    Pour le passage de paramètres, il faut les passer dans le body en application/x-www-form-urlencoded et surtout préciser le Content-Length. setRequestProperty c'est pour passer des headers, pas des paramètres.

    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
    	public static void post(HttpURLConnection con, Map<String, Object> parameters, Charset charset) throws IOException {
     
    		con.setRequestMethod("POST");
    		StringBuilder postdata = new StringBuilder();
    		for (Map.Entry<String, Object> parameter : parameters.entrySet() ) {
    			if (postdata.length() != 0) {
    				postdata.append('&');
    			}
    			postdata.append(URLEncoder.encode(parameter.getKey(), charset));
    			postdata.append('=');
    			postdata.append(URLEncoder.encode(String.valueOf(parameter.getValue()), charset));
    		}
    		byte[] content = postdata.toString().getBytes(charset); 
    		con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    		con.setRequestProperty("Content-Length", String.valueOf(content.length));
    		con.setDoOutput(true);
    		try (OutputStream outputstream = con.getOutputStream()) {
    			outputstream.write(content);
    		}
     
    	}


    Et pour l'appeler :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Map<String,Object> parameters = new LinkedHashMap<>();
    		parameters.put("retrieveLocId", ICAO);
    		parameters.put("reporType", REPORTTYPE);
    		parameters.put("actionType", ACTIONTYPE);
    		parameters.put("button", BUTTON);
    		parameters.put("submit", SUBMIT);
    		post(con,parameters,StandardCharsets.ISO_8859_1);
    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 du Club
    bonsoir Joel,

    tout d'abord merci de prendre le temps de me repondre.
    ci-dessous le requete envoyée depuis postman en curl comme demandé.

    par la suite peux- me dire ou je dois placer les parties de codes que tu as joins dans ta réponse? car qd j'essai il me retourne une erreur. (pardonne moi je suis super novice et j'apprends au coup par coup

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    curl -X POST \
      https://www.notams.faa.gov/dinsQueryWeb/queryRetrievalMapAction.do \
      -H 'Content-Type: text/plain' \
      -H 'Postman-Token: 0d450bc8-84fd-4e91-96fa-8ba5d313f15c' \
      -H 'cache-control: no-cache' \
      -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
      -F retrieveLocId=lfbo \
      -F reportType=Raw \
      -F actionType=notamRetrievalByICAOs

  4. #4
    Modérateur

    Citation Envoyé par K2carca Voir le message

    peux- me dire ou je dois placer les parties de codes que tu as joins dans ta réponse?
    Voici ton code, où j'ai surligné les parties que j'ai modifiées (ajout de mon code et mise en commentaire du tien en trop) :

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
     
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package httpsrequesttest;
     
    import java.io.BufferedReader;
    //import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import javax.net.ssl.HttpsURLConnection;
    import java.net.URL;
    [highlight]
    import java.net.URLEncoder;
    import java.nio.charset.Charset;
    import java.nio.charset.StandardCharsets;
    import java.util.LinkedHashMap;
    import java.util.Map;
    [/highlight] 
    public class HttpURLConnectionExample {
     
    	//private static final String USER_AGENT = "google";
            private static final String ICAO = "LFBO LFMK";
            private static final String REPORTTYPE = "Raw";
            private static final String ACTIONTYPE = "notamRetrievalByICAOs";
            private static final String BUTTON = "Check All NOTAMs";
            private static final String SUBMIT = "View NOTAMs";
     
    	private static final String POST_URL = "https://www.notams.faa.gov/dinsQueryWeb/queryRetrievalMapAction.do";
     
    	[highlight]//.[/highlight] private static final String POST_PARAMS = "POST";
     
    	public static void main(String[] args) throws IOException {
     
    		sendPOST();
    		System.out.println("POST DONE");
    	}
     
    	private static void sendPOST() throws IOException {
    		URL obj = new URL(POST_URL);
    		HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
    		[highlight]/*[/highlight]con.setRequestMethod("POST");
    		//con.setRequestProperty("User-Agent", USER_AGENT);
                    con.setRequestProperty("retrieveLocId", ICAO );
                    con.setRequestProperty("reporType", REPORTTYPE );
                    con.setRequestProperty("actionType", ACTIONTYPE );
                    con.setRequestProperty("button", BUTTON );
                    con.setRequestProperty("submit", SUBMIT );
                    con. 
     
    		// For POST only - START
    		con.setDoOutput(true);
                try //(DataOutputStream os = new DataOutputStream( con.getOutputStream())) {
                    // wr.write(POST_PARAMS);
     
     
     
                    (OutputStream os = con.getOutputStream()) {
                    os.write(POST_PARAMS.getBytes());
                    //os.flush();
                    // For POST only - END
                }[highlight]*/[/highlight]
     
                    [highlight]
                    Map<String,Object> parameters = new LinkedHashMap<>();
    		parameters.put("retrieveLocId", ICAO);
    		parameters.put("reporType", REPORTTYPE);
    		parameters.put("actionType", ACTIONTYPE);
    		parameters.put("button", BUTTON);
    		parameters.put("submit", SUBMIT);
    		post(con,parameters,StandardCharsets.ISO_8859_1);
                    [/highlight]
    
    		int responseCode = con.getResponseCode();
    		System.out.println("POST Response Code :: " + responseCode);
     
    		if (HttpsURLConnection.HTTP_OK == responseCode) { 			StringBuffer response;
                    try ( //success
                            BufferedReader in = new BufferedReader(new InputStreamReader(
                                    con.getInputStream()))) {
                        String inputLine;
                        response = new StringBuffer();
                        while ((inputLine = in.readLine()) != null) {
                            response.append(inputLine);
                        }
                    }
     
                    //print result
                    System.out.println(response.toString());
                    } else {
                        System.out.println("POST request not worked");
                    }
    	}
    
        
    
        [highlight]
    public static void post(HttpURLConnection con, Map<String, Object> parameters, Charset charset) throws IOException {
     
    		con.setRequestMethod("POST");
    		StringBuilder postdata = new StringBuilder();
    		for (Map.Entry<String, Object> parameter : parameters.entrySet() ) {
    			if (postdata.length() != 0) {
    				postdata.append('&');
    			}
    			postdata.append(URLEncoder.encode(parameter.getKey(), charset));
    			postdata.append('=');
    			postdata.append(URLEncoder.encode(String.valueOf(parameter.getValue()), charset));
    		}
    		byte[] content = postdata.toString().getBytes(charset); 
    		con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    		con.setRequestProperty("Content-Length", String.valueOf(content.length));
    		con.setDoOutput(true);
    		try (OutputStream outputstream = con.getOutputStream()) {
    			outputstream.write(content);
    		}
    
    	}
        [/highlight]
    
        void sendGet() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
     
        void sendPost() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    }


    Il est important d'appeler la méthode post() après avoir passé tous les headers (appel de setRequestProperty) et de ne plus rien écrire après.

    Citation Envoyé par K2carca Voir le message

    ci-dessous le requete envoyée depuis postman en curl comme demandé.
    Tu ne m'as pas dit si tu recevais bien du XML sous postman. Parce que les spécificités tu cas n'expliquent pas que tu obtiennes du XML alors que j'obtiens du HTML. Bon, ce curl me semble un peu foireux, mais ça c'est postman, bien qu'il fonctionne et qu'il me renvoit du HTML ! Pareil si je transmets mes paramètres en multipart/formdata en 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 du Club
    il me dit "incompatible types: Charset cannot be be converted to String"
    Dois je remplacer charset (souligné dans le code par un autre élément ?

  6. #6
    Modérateur

    Tu as dû modifier le code en recopiant...

    Ici le type de charset est java.nio.charset.Charset
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    public static void post(HttpURLConnection con, Map<String, Object> parameters, Charset charset) throws IOException {


    Dans l'appel, le type est compatible : post(con,parameters,StandardCharsets.ISO_8859_1);

    Dans les invocations qui utilisent le paramètre, idem :
    1. postdata.append(URLEncoder.encode(parameter.getKey(), charset));
    2. postdata.append(URLEncoder.encode(String.valueOf(parameter.getValue()), charset))
    3. byte[] content = postdata.toString().getBytes(charset);


    Donc si l'exemple a été copié fidèlement tu ne peux pas avoir cette erreur...
    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 du Club
    je t'assure avoir recopier ton code corrigé en faisant CTRL A : CTRLV pourtant et ne rien avoir modifier, a la rigeur comme ma connexion est httpS j'ai juste rajouté le S la ou il manquait =

  8. #8
    Modérateur

    Pourtant si je fais la même chose (ctrl-c.ctrl-v), à part l'import
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    import 
    import java.net.HttpURLConnection;
    manquant, je n'ai aucune erreur !

    Tu n'as qu'à mettre ton code dans ton prochain message, juste tel quel.
    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 du Club
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
     
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package httpsrequesttest;
     
    import java.io.BufferedReader;
    //import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import javax.net.ssl.HttpsURLConnection;
    import java.net.URL;
     
    import java.net.URLEncoder;
    import java.nio.charset.Charset;
    import java.nio.charset.StandardCharsets;
    import java.util.LinkedHashMap;
    import java.util.Map;
     
    public class HttpURLConnectionExample {
     
    	//private static final String USER_AGENT = "google";
            private static final String ICAO = "LFBO LFMK";
            private static final String REPORTTYPE = "Raw";
            private static final String ACTIONTYPE = "notamRetrievalByICAOs";
            private static final String BUTTON = "Check All NOTAMs";
            private static final String SUBMIT = "View NOTAMs";
     
    	private static final String POST_URL = "https://www.notams.faa.gov/dinsQueryWeb/queryRetrievalMapAction.do";
     
    	//. private static final String POST_PARAMS = "POST";
     
    	public static void main(String[] args) throws IOException {
     
    		sendPOST();
    		System.out.println("POST DONE");
    	}
     
    	private static void sendPOST() throws IOException {
    		URL obj = new URL(POST_URL);
    		HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
    		/*con.setRequestMethod("POST");
    		//con.setRequestProperty("User-Agent", USER_AGENT);
                    con.setRequestProperty("retrieveLocId", ICAO );
                    con.setRequestProperty("reporType", REPORTTYPE );
                    con.setRequestProperty("actionType", ACTIONTYPE );
                    con.setRequestProperty("button", BUTTON );
                    con.setRequestProperty("submit", SUBMIT );
                    con. 
     
    		// For POST only - START
    		con.setDoOutput(true);
                try //(DataOutputStream os = new DataOutputStream( con.getOutputStream())) {
                    // wr.write(POST_PARAMS);
     
     
     
                    (OutputStream os = con.getOutputStream()) {
                    os.write(POST_PARAMS.getBytes());
                    //os.flush();
                    // For POST only - END
                }*/
     
     
                    Map<String,Object> parameters = new LinkedHashMap<>();
    		parameters.put("retrieveLocId", ICAO);
    		parameters.put("reporType", REPORTTYPE);
    		parameters.put("actionType", ACTIONTYPE);
    		parameters.put("button", BUTTON);
    		parameters.put("submit", SUBMIT);
    		post(con,parameters,StandardCharsets.ISO_8859_1);
     
     
    		int responseCode = con.getResponseCode();
    		System.out.println("POST Response Code :: " + responseCode);
     
    		if (HttpsURLConnection.HTTP_OK == responseCode) { 			StringBuffer response;
                    try ( //success
                            BufferedReader in = new BufferedReader(new InputStreamReader(
                                    con.getInputStream()))) {
                        String inputLine;
                        response = new StringBuffer();
                        while ((inputLine = in.readLine()) != null) {
                            response.append(inputLine);
                        }
                    }
     
                    //print result
                    System.out.println(response.toString());
                    } else {
                        System.out.println("POST request not worked");
                    }
    	}
     
     
     
     
    public static void post(HttpURLConnection con, Map<String, Object> parameters, Charset charset) throws IOException {
     
    		con.setRequestMethod("POST");
    		StringBuilder postdata = new StringBuilder();
    		for (Map.Entry<String, Object> parameter : parameters.entrySet() ) {
    			if (postdata.length() != 0) {
    				postdata.append('&');
    			}
    			postdata.append(URLEncoder.encode(parameter.getKey(), charset));
    			postdata.append('=');
    			postdata.append(URLEncoder.encode(String.valueOf(parameter.getValue()), charset));
    		}
    		byte[] content = postdata.toString().getBytes(charset); 
    		con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    		con.setRequestProperty("Content-Length", String.valueOf(content.length));
    		con.setDoOutput(true);
    		try (OutputStream outputstream = con.getOutputStream()) {
    			outputstream.write(content);
    		}
     
    	}
     
     
        void sendGet() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
     
        void sendPost() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    }

    je remets ce que je reviens de copier du message initial modifié.

    a noter ligne 102 "HttpURLConnection" est souligné pour corriger cet "erreur il me demande d'importer java.net.HttpURLConnection et sun.net.www.protocol.http.HttpURLConnection
    ensuite ligne 106 il me mets un warning : "can use functional operation" ?
    et enfin celle sur les charset

  10. #10
    Modérateur

    Ce message n'a pas pu être affiché car il comporte des erreurs.
    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.

  11. #11
    Membre du Club
    Citation Envoyé par joel.drigo Voir le message
    Quelle erreur ? Pas d'erreur chez moi. Dans mon exemple, nulle part on utilise un String comme valeur d'argument de type Charset. D'ailleurs j'exécute le code sans souci.


    pas de souci, pour les erreurs ce sont celles don't je t'ai mentionné plus haut dans la discussion. (avec le charset). J'utilise JDK 1.8 par defaut. comme je t'ai dis j'ai cree un nouveau projet en copiant ton code (corriger et qui marche chez toi) dans ce nouveau projet. et j'ai juste ces 2 point d'exclamation rouge qui m'empeche de lance le programme pour cause d'incompatibilité.

  12. #12
    Modérateur

    En Java 8, la méthode encode(String, Charset) n'existe pas encore (seulement à partir de la 10) dans java.net.URLEncoder. On est juste bientôt à la version 13...

    Il suffit de passercharset.name() au lieu de charset 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.

  13. #13
    Membre du Club
    voici une capture ecran pour une meilleure compréhension


  14. #14
    Membre du Club
    ok merci
    je te confirme que ca marche ainsi.
    Apres l'ajout de ".name" les "erreurs de compatibilitée" ont disparue. (fallait juste que je vous spécifie sous quel JDK je travaille en fait désolé pour cette perte de temps).

    Puis vous demander juste une chose en plus svp ? si je veux sortir le résultat dans un fichier sur mon bureau (xml ou html) je dois indiquer cela sur la partie de code system.outprint?

  15. #15
    Modérateur

    Citation Envoyé par K2carca Voir le message
    ok merci
    je te confirme que ca marche ainsi.
    Apres l'ajout de ".name" les "erreurs de compatibilitée" ont disparue. (fallait juste que je vous spécifie sous quel JDK je travaille en fait désolé pour cette perte de temps).
    Ou me montrer tout de suite les lignes en erreur
    Citation Envoyé par K2carca Voir le message

    Puis vous demander juste une chose en plus svp ? si je veux sortir le résultat dans un fichier sur mon bureau (xml ou html) je dois indiquer cela sur la partie de code system.outprint?
    En XML, ça risque pas, vu que je t'ai dit que c'était du HTML qu'on obtenait. Enfin, on peut générer du XML à partir du HTML en analysant le HTML, mais

    1. il vaut mieux utiliser un parser html pour pouvoir parcourir facilement le html. JSoup par exemple, d'ailleurs ça permettrait également de faire beaucoup plus facilement la requête.
    2. Le code de recherche et de formatage des informations est très spécifique au HTML et à ce que tu veux en obtenir en XML. Y'a que toi qui sait...
    3. Ensuite prendre une API XML la plus adaptée
      1. un JDOM2 si tu dois manipuler l'arbre XML et le parcourir et le reparcourir facilement, et si le modèle est simple
      2. StAX en streaming, si le modèle est simple et qu'on peut générer le xml en une passe, particulièrement si le volume de données est conséquent
      3. Ou une API de sérialisation à partir d'objets Java par exemple, JAXB




    Ensuite, pour obtenir un fichier qui contient la réponse de la requête qu'on affiche actuellement en console, il y a maintes manières d'écrire un texte dans un fichier (y compris créer un PrintStream qui fera que tu auras exactement l'équivalent de System.out mais vers un fichier). Mais le plus simple est encore de directement écrire le texte lu dans la réponse au fur et à mesure (et ça te donnera en exemple comment écrire une String dans un fichier, via un PrintWriter),

    Remplace cette partie (ou commente-là) :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    			StringBuffer response;
    			try ( // success
    					BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()))) {
    				String inputLine;
    				response = new StringBuffer();
    				while ((inputLine = in.readLine()) != null) {
    					response.append(inputLine);
    				}
    			}
     
    			// print result
    			System.out.println(response.toString());


    par (attention, ça ne fonctionne que sous Windows, pour un autre système il faut adapter le chemin du fichier)
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    File file =  new File(System.getProperty("user.home"),"Desktop/MonFichier.html"); // chemin du fichier...
    try(PrintWriter printwriter = new PrintWriter(file,StandardCharsets.UTF_8);
         BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()))) {
    	in.lines().forEach(printwriter::println);
    }
    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.

  16. #16
    Membre du Club
    Tout d'abord merci pour votre réponse, elle mets tres utile.
    Ensuite, en effet je develloppe initialement ss mac, l'application qui in fine ira ss window.

    enfin, en effet du resultat que je vois dans la console je souhaite juste toutes les parties qui se trouvent entre certaines balises sans les header evidemment. bref juste les textes pas le reste.

  17. #17
    Modérateur

    Ce message n'a pas pu être affiché car il comporte des erreurs.
    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.

  18. #18
    Membre du Club
    en gros le xml que tu me fais parvenir est ce que je recherche a obtenir mais sous le format "raw" de l'appli autrement sous jdk 8 il connait pas les org.jsoup...


  19. #19
    Modérateur

    Citation Envoyé par K2carca Voir le message
    il connait pas les org.jsoup...
    C'est une bibliothèque externe qu'il faut télécharger : https://jsoup.org/download. Tu télécharges le jar, tu le mets dans ton projet et tu l'ajoutes au classpath de ton projet.
    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.

  20. #20
    Membre du Club
    Merci Joel pour ton aide précieuse.
    j'ai passé un bon moment a essayer d'installer le JSoup (quand on est pas bon dans ce genre de ce chose soit on apprend soit on apprend :-) )
    en tout en dehors maintenant d'une petite mise en forme de sortie quand au format du texte que je recois (en principe je devrais le recevoir en reportType = raw comme ceci
    4062/19 NOTAMN
    Q) LFBB/QMRLC/IV/NBO/A /000/999/4338N00122E005
    A) LFBO B) 1909182000 C) 1909190400
    E) RWY 14R/32L CLOSED
    CREATED: 12 Sep 2019 14:52:00
    SOURCE: EUECYIYN

    mais la cela ne semble pas être le cas car ils semblent ressortir en reportType = Report comme cela

    A4062/19 - RWY 14R/32L CLOSED. 18 SEP 20:00 2019 UNTIL 19 SEP 04:00 2019. CREATED: 12 SEP

    ce qui m'arrange moins pour la suite et la ou je veux en venir. je vais donc essayer de regarder d'ou cela peut provenir,
    donc en dehors de se souci la mon pb de Http Post est résolu
    un grand merci a toi et je vais creuser un peu plus sur tes conseils la facon de faire des telles requêtes.
    Il est un peu regrettable qu'il n'y ai pas de Tuto a proprement parler en francais sur ce sujet ou du moins trop succint comme information.