Load Website via HttpURLConnection

  • Antworten:4
Markus B.
  • Forum-Beiträge: 636

26.03.2012, 21:22:51 via Website

Hallo,
da im Forum gefühlt jede Woche 10 mal gefragt wird: "Wie lade ich eine Website via HttpURLConnection?" oder so etwas wie: "Was mache ich beim Laden via HttpURLConnection falsch?", habe ich das einfach mal hier gepostet.
Die beiden Methoden sind rudimentär und machen das nötigste. Sollten hier Verbesserungen oder Erweiterungen eingefügt werden, einfach Posten und dann werde ich das nachhalten.

Anmerkung:
HttpURLConnection kann man direkt verwenden muss man aber nicht. Einige sehr gute http libs habe ich unten verlinkt.

1/**
2 * Lädt anhand der übergebenen URL die Seite und gibt den Inhalt als java.lang.String zurück
3 * @param websiteUrl Url zur Webseite, welchen den Content enthält
4 * @return In Inhalt der Webseite als java.lang.String
5 */
6 private String ladeWebsite(final String websiteUrl)
7 {
8 HttpURLConnection urlConnection = null;
9
10 try
11 {
12 final URL url = new URL(websiteUrl);
13 urlConnection = (HttpURLConnection) url.openConnection();
14 final InputStream result = new BufferedInputStream(urlConnection.getInputStream());
15
16 return readStream(result);
17 }
18 catch (MalformedURLException e)
19 {
20 Log.e("MY_TAG", e.getMessage());
21 }
22 catch (IOException e)
23 {
24 Log.e("MY_TAG", e.getMessage());
25 }
26 finally
27 {
28 if ( null != urlConnection )
29 {
30 urlConnection.disconnect();
31 }
32 }
33
34 return null;
35 }
36
37 /**
38 * Hier wird ein beliebiger in ein String umgewandelt.
39 * @param in InputStream, welcher die Daten zum Umwandeln enthält.
40 * @return Die Daten aus dem InputStream als java.lang.String.
41 * @throws IOException Exception, welchem beim Umwandeln auf treten kann.
42 */
43 private String readStream(final InputStream in) throws IOException
44 {
45 final BufferedReader reader = new BufferedReader(new InputStreamReader(in), 4096);
46 final StringBuilder result = new StringBuilder();
47
48 String line;
49 while ((line = reader.readLine()) != null)
50 {
51 result.append(line);
52 }
53 reader.close();
54
55 return result.toString();
56 }

Seit Android 3.0 (API level 11) ist es nicht mehr gestattet das Netzwerkzugriffe im UI-Thread ausgeführt werden. Somit muss diese Kommunikation in einen Thread, AsyncTask, Services usw. ausgelagert werden.

**update**
Hier ein paar sehr gute libs um http einfacher zu handeln. Je nachdem wie weit man das Problem abstrahieren möchte:

OkHttp
Android async http
volley
AndroidAsync
ion

Ich hab die alle mal genutzt und bin damit immer gut gefahren. Wobei mein Favorit aktuell Android async http ist (Bald auch in Kombination mit OkHttp).

Gruß,
Markus

— geändert am 02.12.2013, 09:36:29

Sebastian WinklerAnsgar M

Antworten
Markus B.
  • Forum-Beiträge: 636

15.02.2013, 22:27:50 via Website

Weil es nicht annähernd den gleichen Zweck erfüllt. Hier geht das es darum den Inhalt den http-Request zu verarbeiten.

Antworten
Enrico
  • Forum-Beiträge: 33

18.02.2013, 20:13:43 via Website

Hey Markus,
gute Idee hier mal den Code zu schreiben.
Bitte füge noch hinzu, dass das ganze in einer AsyncTask bzw. in einem Background Thread stattfinden kann, sonst bekommt man NetworkOnMainThreadExceptions.

Danke
gruß

impjor

Antworten
Markus B.
  • Forum-Beiträge: 636

02.12.2013, 09:38:34 via Website

Da ich in letzter Zeit wieder viel mit Http Zeugs zutun hatte hab ich meine Favoriten in Sachen libs mit aufgenommen.

Antworten