Java Language
HttpURLConnection
Zoeken…
Opmerkingen
Als u HttpUrlConnection op Android gebruikt, moet u de internetmachtiging aan uw app toevoegen (in
AndroidManifest.xml
).Er zijn ook andere Java HTTP-clients en -bibliotheken, zoals Square's OkHttp , die gemakkelijker te gebruiken zijn en mogelijk betere prestaties of meer functies bieden.
Haal respons body uit een URL als een String
String getText(String url) throws IOException {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
//add headers to the connection, or check the status if desired..
// handle error response code it occurs
int responseCode = conn.getResponseCode();
InputStream inputStream;
if (200 <= responseCode && responseCode <= 299) {
inputStream = connection.getInputStream();
} else {
inputStream = connection.getErrorStream();
}
BufferedReader in = new BufferedReader(
new InputStreamReader(
inputStream));
StringBuilder response = new StringBuilder();
String currentLine;
while ((currentLine = in.readLine()) != null)
response.append(currentLine);
in.close();
return response.toString();
}
Hiermee worden tekstgegevens van de opgegeven URL gedownload en als een tekenreeks geretourneerd.
Hoe dit werkt:
Eerst maken we een
HttpUrlConnection
van onze URL, metnew URL(url).openConnection()
. We casten deUrlConnection
dit keert terug naar eenHttpUrlConnection
, dus we hebben toegang tot dingen zoals het toevoegen van headers (zoals User Agent) of het controleren van de reactiecode. (Dit voorbeeld doet dat niet, maar het is eenvoudig toe te voegen.)Maak vervolgens
InputStream
basis van de reactiecode (voor foutafhandeling)Maak vervolgens een
BufferedReader
waarmee we tekst kunnen lezen vanInputStream
we van de verbinding krijgen.Nu voegen we de tekst regel voor regel toe aan een
StringBuilder
.Sluit de
InputStream
en retourneer de String die we nu hebben.
Opmerkingen:
Deze methode
IoException
eenIoException
in geval van mislukking (zoals een netwerkfout of geen internetverbinding) en geeft ook een ongecontroleerdeMalformedUrlException
als de opgegeven URL niet geldig is.Het kan worden gebruikt voor het lezen van elke URL die tekst retourneert, zoals webpagina's (HTML), REST API's die JSON of XML retourneren, enz.
Gebruik:
Is heel simpel:
String text = getText(”http://example.com");
//Do something with the text from example.com, in this case the HTML.
POST-gegevens
public static void post(String url, byte [] data, String contentType) throws IOException {
HttpURLConnection connection = null;
OutputStream out = null;
InputStream in = null;
try {
connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestProperty("Content-Type", contentType);
connection.setDoOutput(true);
out = connection.getOutputStream();
out.write(data);
out.close();
in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
in.close();
} finally {
if (connection != null) connection.disconnect();
if (out != null) out.close();
if (in != null) in.close();
}
}
Hiermee worden gegevens naar de opgegeven URL POST en vervolgens de reactie regel voor regel gelezen.
Hoe het werkt
- Zoals gewoonlijk verkrijgen we de
HttpURLConnection
via eenURL
. - Stel het inhoudstype in met
setRequestProperty
, standaard is ditapplication/x-www-form-urlencoded
-
setDoOutput(true)
vertelt de verbinding dat we gegevens zullen verzenden. - Vervolgens verkrijgen we de
OutputStream
doorgetOutputStream()
aan te roepen en er gegevensgetOutputStream()
schrijven. Vergeet niet om het te sluiten nadat u klaar bent. - Eindelijk lezen we de serverreactie.
Bron verwijderen
public static void delete (String urlString, String contentType) throws IOException {
HttpURLConnection connection = null;
try {
URL url = new URL(urlString);
connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setRequestMethod("DELETE");
connection.setRequestProperty("Content-Type", contentType);
Map<String, List<String>> map = connection.getHeaderFields();
StringBuilder sb = new StringBuilder();
Iterator<Map.Entry<String, String>> iterator = responseHeader.entrySet().iterator();
while(iterator.hasNext())
{
Map.Entry<String, String> entry = iterator.next();
sb.append(entry.getKey());
sb.append('=').append('"');
sb.append(entry.getValue());
sb.append('"');
if(iterator.hasNext())
{
sb.append(',').append(' ');
}
}
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) connection.disconnect();
}
}
Hiermee wordt de bron in de opgegeven URL VERWIJDERD en wordt vervolgens de antwoordkop afgedrukt.
Hoe het werkt
- we verkrijgen de
HttpURLConnection
via eenURL
. - Stel het inhoudstype in met
setRequestProperty
, standaard is ditapplication/x-www-form-urlencoded
-
setDoInput(true)
vertelt de verbinding die we van plan zijn om de URL-verbinding te gebruiken voor invoer. -
setRequestMethod("DELETE")
om HTTP DELETE uit te voeren
Eindelijk drukken we de server response header af.
Controleer of de bron bestaat
/**
* Checks if a resource exists by sending a HEAD-Request.
* @param url The url of a resource which has to be checked.
* @return true if the response code is 200 OK.
*/
public static final boolean checkIfResourceExists(URL url) throws IOException {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("HEAD");
int code = conn.getResponseCode();
conn.disconnect();
return code == 200;
}
Uitleg:
Als u alleen controleert of een bron bestaat, is het beter om een HEAD-verzoek te gebruiken dan een GET. Dit vermijdt de overhead van het overbrengen van de bron.
Merk op dat de methode alleen true
retourneert als de responscode 200
. Als u omleidingsreacties verwacht (bijv. 3XX), moet de methode mogelijk worden verbeterd om ze te respecteren.
Voorbeeld:
checkIfResourceExists(new URL("http://images.google.com/")); // true
checkIfResourceExists(new URL("http://pictures.google.com/")); // false