143 votes

Comment envoyer une requête HTTP PUT, DELETE dans HttpURLConnection ?

Je veux savoir s'il est possible d'envoyer des requêtes PUT, DELETE (pratiquement) par l'intermédiaire de java.net.HttpURLConnection à une URL basée sur le protocole HTTP.

J'ai lu de nombreux articles décrivant comment envoyer des requêtes GET, POST, TRACE et OPTIONS, mais je n'ai toujours pas trouvé d'exemple de code permettant d'exécuter avec succès les requêtes PUT et DELETE.

2 votes

Pouvez-vous nous montrer le code que vous avez essayé d'utiliser ?

188voto

Matthew Murdoch Points 11530

Pour effectuer un HTTP PUT :

URL url = new URL("http://www.example.com/resource");
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setRequestMethod("PUT");
OutputStreamWriter out = new OutputStreamWriter(
    httpCon.getOutputStream());
out.write("Resource content");
out.close();
httpCon.getInputStream();

Pour effectuer un SUPPRESSION HTTP :

URL url = new URL("http://www.example.com/resource");
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setRequestProperty(
    "Content-Type", "application/x-www-form-urlencoded" );
httpCon.setRequestMethod("DELETE");
httpCon.connect();

0 votes

Est-il possible qu'en utilisant un code java, vous puissiez supprimer un courrier de votre compte de messagerie (en utilisant la méthode DELETE) ou qu'en utilisant la méthode post, vous puissiez créer un document (comme un blog) ?

0 votes

Ou Est-il possible d'envoyer une image/vidéo/audio au serveur en utilisant la méthode POST ?

1 votes

Oui. Toutes ces choses sont possibles mais dépendent vraiment de l'API supportée par votre fournisseur de messagerie/blog.

26voto

Eli Heifetz Points 131

C'est comme ça que ça a marché pour moi :

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("DELETE");
int responseCode = connection.getResponseCode();

13voto

public  HttpURLConnection getHttpConnection(String url, String type){
        URL uri = null;
        HttpURLConnection con = null;
        try{
            uri = new URL(url);
            con = (HttpURLConnection) uri.openConnection();
            con.setRequestMethod(type); //type: POST, PUT, DELETE, GET
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setConnectTimeout(60000); //60 secs
            con.setReadTimeout(60000); //60 secs
            con.setRequestProperty("Accept-Encoding", "Your Encoding");
            con.setRequestProperty("Content-Type", "Your Encoding");
        }catch(Exception e){
            logger.info( "connection i/o failed" );
        }
        return con;
}

Ensuite, dans votre code :

public void yourmethod(String url, String type, String reqbody){
    HttpURLConnection con = null;
    String result = null;
    try {
        con = conUtil.getHttpConnection( url , type);
    //you can add any request body here if you want to post
         if( reqbody != null){  
                con.setDoInput(true);
                con.setDoOutput(true);
                DataOutputStream out = new  DataOutputStream(con.getOutputStream());
                out.writeBytes(reqbody);
                out.flush();
                out.close();
            }
        con.connect();
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String temp = null;
        StringBuilder sb = new StringBuilder();
        while((temp = in.readLine()) != null){
            sb.append(temp).append(" ");
        }
        result = sb.toString();
        in.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        logger.error(e.getMessage());
    }
//result is the response you get from the remote side
}

0 votes

Obtention de 'java.io.IOException : unsupported method : put' dans le journal de bord de J2me sdk

12voto

Alvaro Points 179

Je suis d'accord avec @adietisheim et les autres personnes qui suggèrent HttpClient.

J'ai passé du temps à essayer de faire un simple appel à un service de repos avec HttpURLConnection et cela ne m'avait pas convaincu. Après cela, j'ai essayé avec HttpClient et c'était vraiment plus facile, compréhensible et agréable.

Voici un exemple de code pour effectuer un appel put http :

DefaultHttpClient httpClient = new DefaultHttpClient();

HttpPut putRequest = new HttpPut(URI);

StringEntity input = new StringEntity(XML);
input.setContentType(CONTENT_TYPE);

putRequest.setEntity(input);
HttpResponse response = httpClient.execute(putRequest);

0 votes

Je voulais juste vous remercier pour ça. J'ai passé de nombreuses heures à essayer de faire en sorte que mon code utilise HttpURLConnection pour fonctionner, mais je me heurtais à une erreur étrange, à savoir : cannot retry due to server authentication, in streaming mode . Suivre vos conseils a fonctionné pour moi. Je réalise que cela ne répond pas exactement à la question, qui demande d'utiliser HttpURLConnection mais votre réponse m'a aidé.

0 votes

@Deprecated utiliser HttpClientBuilder à la place

-1voto

Clint Points 5864

Je recommande Apache HTTPClient.

9 votes

Pourquoi recommander HTTPClient ? C'est énorme. Je veux dire, en taille.

1 votes

@jayarjo, C'est une partie du SDK Android.

9 votes

@Zamel : Où Android entre-t-il exactement en jeu ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X