2013-10-11 10 views
9

Ich habe Restful WebServices, und ich send POST und GET HTTP-Anfrage, wie PUT und DELTE Anfrage HTTP in httpURLConection mit JAVA senden.Wie Senden PUT, DELETE HTTP-Anfrage in HttpURLConnection in JAVA

+0

Als Alternative für die native Nutzung von HttpURLConnection Sie eine kleine Bibliothek verwenden können, genannt [DavidWebb] (https://github.com/hgoebl/DavidWebb). Dort finden Sie eine Liste ähnlicher Bibliotheken. Die native Verwendung von HttpURLConnection ist umständlich und fehleranfällig. – hgoebl

Antwort

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(); 
    } 
} 

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

danke ist perfekt !!! nur ich brauche Methode DELETE. !! – user2816207

+0

Muss ich htpURLConnection.connect() nicht aufrufen? Wozu dient diese Funktion? –

-1

können Sie außer Kraft setzen

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

den HTTP-PUT Operation durchführt; Die Standardimplementierung meldet einen HTTP BAD_REQUEST-Fehler . Die PUT-Operation ist analog zum Senden einer Datei über FTP. Servlet-Writer, die diese Methode überschreiben, müssen beliebige Content- * Header, die mit der Anfrage gesendet werden, berücksichtigen. (Diese Header enthalten content-length, content-type, content-transfer-encoding, content-encoding, Inhaltsbasis, content-language, content-location, content-MD5 und content-range.) Wenn die Unterklasse kann einen Inhaltskopf nicht ehren, dann muss er eine Fehlerantwort (501) ausgeben und die Anfrage verwerfen. Weitere Informationen finden Sie im HTTP 1.1-RFC.

Diese Methode muss weder "sicher" noch "idempotent" sein. Durch PUT angeforderte Operationen können Nebenwirkungen haben, für die der Benutzer zur Verantwortung gezogen werden kann. Obwohl nicht erforderlich, können Servlet-Writer , die diese Methode überschreiben, möglicherweise eine Kopie des betroffenen URI im temporären Speicher speichern.

und

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

führt der HTTP-Operation LÖSCHEN; Die Standardimplementierung meldet einen HTTP BAD_REQUEST-Fehler. Die DELETE-Operation ermöglicht es einem Client, anzufordern, dass ein URI vom Server entfernt wird. Diese Methode benötigt nicht, um entweder "sicher" oder "idempotent" zu sein. Operationen, die über angefordert werden, können zu Nebenwirkungen führen, für die Benutzer zur Verantwortung gezogen werden können. Obwohl nicht erforderlich, Servlet-Writer, die diese Methode Unterklasse möchten eine Kopie des betroffenen URI in temporärem Speicher speichern.

+0

Das sind Servlet-API-Methoden, aber das OP fragt nach einem HTTP-Client Ich denke, –

+0

Vielleicht, aber ich habe verstanden, dass er bereits ein Servlet implementiert hat, doGet und DoPut zu verwalten und möchte wissen, wie die anderen beiden Operationen – RamonBoza

+0

implementieren Ich habe den Getter und PostT, muss ich implementieren, löschen und Methoden, aber nicht kommen, weil tengno ein Eingabeparameter kann mir helfen? - @MatthewGilliard – user2816207

4

DELETE Wenn ich die DELETE-Anforderung von @BartekM verwenden, ist es diese Ausnahme erhalten:

java.net.ProtocolException: DELETE does not support writing 

es zu beheben, ich nur entfernen Sie diese Anweisung:

// httpURLConnection.setDoOutput(true); 

Quelle: Sending HTTP DELETE request in Android

Verwandte Themen