2013-10-11 6 views
9

Ho dei servizi Web riposanti e invio POST e GET richiesta HTTP, come inviare PUT e richiesta DELTE HTTP in httpURLConection con JAVA.Come inviare PUT, ELIMINARE la richiesta HTTP in HttpURLConnection in JAVA

+0

Come alternativa per l'utilizzo nativo di HttpURLConnection è possibile utilizzare una piccola libreria chiamata [DavidWebb] (https://github.com/hgoebl/DavidWebb). Lì puoi trovare un elenco di librerie simili. L'uso di HttpURLConnection in modo nativo è ingombrante e soggetto a errori. – hgoebl

risposta

23

PUT

URL url = null; 
try { 
    url = new URL("http://localhost:8080/putservice"); 
} catch (MalformedURLException exception) { 
    exception.printStackTrace(); 
} 
HttpURLConnection httpURLConnection = null; 
DataOutputStream dataOutputStream = null; 
try { 
    httpURLConnection = (HttpURLConnection) url.openConnection(); 
    httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    httpURLConnection.setRequestMethod("PUT"); 
    httpURLConnection.setDoInput(true); 
    httpURLConnection.setDoOutput(true); 
    dataOutputStream = new DataOutputStream(httpURLConnection.getOutputStream()); 
    dataOutputStream.write("hello"); 
} catch (IOException exception) { 
    exception.printStackTrace(); 
} finally { 
    if (dataOutputStream != null) { 
     try { 
      dataOutputStream.flush(); 
      dataOutputStream.close(); 
     } catch (IOException exception) { 
      exception.printStackTrace(); 
     } 
    } 
    if (httpsURLConnection != null) { 
     httpsURLConnection.disconnect(); 
    } 
} 

DELETE

URL url = null; 
try { 
    url = new URL("http://localhost:8080/deleteservice"); 
} catch (MalformedURLException exception) { 
    exception.printStackTrace(); 
} 
HttpURLConnection httpURLConnection = null; 
try { 
    httpURLConnection = (HttpURLConnection) url.openConnection(); 
    httpURLConnection.setRequestProperty("Content-Type", 
       "application/x-www-form-urlencoded"); 
    httpURLConnection.setRequestMethod("DELETE"); 
    System.out.println(httpURLConnection.getResponseCode()); 
} catch (IOException exception) { 
    exception.printStackTrace(); 
} finally {   
    if (httpURLConnection != null) { 
     httpURLConnection.disconnect(); 
    } 
} 
+0

grazie è perfetto !!! solo ho bisogno del metodo DELETE. !! – user2816207

+0

Non è necessario chiamare htpURLConnection.connect()? A cosa serve questa funzione? –

-1

è possibile ignorare

protected void doPut(HttpServletRequest req, 
         HttpServletResponse resp) throws ServletException, IOException; 

Esegue l'operazione HTTP PUT; l'implementazione predefinita riporta un errore HTTP BAD_REQUEST . L'operazione PUT è analoga all'invio di un file tramite FTP. I writer di servlet che eseguono l'override di questo metodo devono rispettare qualsiasi intestazione Content- * inviata con la richiesta. (Queste intestazioni includono lunghezza del contenuto, tipo di contenuto, codifica di trasferimento del contenuto, codifica del contenuto, contenuto-base, lingua del contenuto, posizione del contenuto, contenuto-MD5 e gamma di contenuti.) Se la sottoclasse non può onorare un'intestazione di contenuto , quindi deve emettere una risposta di errore (501) e scartare la richiesta . Per ulteriori informazioni, vedere HTTP 1.1 RFC.

Questo metodo non deve essere né "sicuro" né "idempotente". Le operazioni richieste tramite PUT possono avere effetti collaterali per i quali l'utente può essere ritenuto responsabile. Sebbene non sia richiesto, i writer di servlet che eseguono l'override di questo metodo potrebbero voler salvare una copia dell'URI interessato nella memoria temporanea.

e

protected void doDelete(HttpServletRequest req, 
         HttpServletResponse resp) throws ServletException, IOException 

Esegue l'HTTP DELETE operazione; l'implementazione predefinita riporta un errore HTTP BAD_REQUEST. L'operazione DELETE consente a un client di di richiedere la rimozione di un URI dal server. Questo metodo non ha bisogno di per essere "sicuro" o "idempotente". Le operazioni richieste tramite DELETE possono avere effetti collaterali per i quali gli utenti possono essere ritenuti responsabili. Anche se non richiesto, i writer di servlet che eseguono la sottoclasse di questo metodo possono desiderano salvare una copia dell'URI interessato nella memoria temporanea.

+0

Questi sono i metodi dell'API Servlet ma l'OP sta chiedendo un client HTTP penso che sia –

+0

Forse, ma ho capito che ha già implementato un servlet che gestisce doGet e doPut e vuole sapere come implementare le altre due operazioni – RamonBoza

+0

se, come Ho il getter e postT, ho bisogno di implementare delete, e mettere i metodi, tuttavia non vengono perché un parametro di input tenngo può aiutarmi? - @MatthewGilliard – user2816207

4

Se uso la richiesta di eliminazione dalla @BartekM, si ottiene questa eccezione:

java.net.ProtocolException: DELETE does not support writing 

per risolvere il problema, ho solo rimuovere questa istruzione:

// httpURLConnection.setDoOutput(true); 

fonte: Sending HTTP DELETE request in Android

Problemi correlati