Toon posts:

[Android] HTTPS verbinding gebruiken

Pagina: 1
Acties:

Onderwerpen


  • Stay1ed
  • Registratie: oktober 2008
  • Laatst online: 16-09 15:39
Hallo mede-tweakers,

Als hobby project probeer ik een Android applicatie te ontwikkelen. Het is niet mijn bedoeling dat deze meteen in de Android Market verschijnt, maar ik vond het leuk om wat meer praktijkervaring op te doen met Java. Ik heb gekozen voor een redelijk simpele applicatie die URL's kan synchroniseren met een desktop mbv Firefox Sync. De API van Firefox Sync vereist een HTTPS verbinding met de server, en dat krijg ik niet voor elkaar. Ik heb redelijk wat algoritmes geprobeerd:

In deze code zijn HTTPS_PORT, URL en HOSTNAME (van de server) allen constanten.

Gebruik maken van DefaultHttpClient en SSLSocket:
Java:
1
2
3
4
5
6
7
8
9
10
DefaultHttpClientConnection client = new DefaultHttpClient();

SSLSocketFactory sslFactory = SSLSocketFactory.getSocketFactory();
sslFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Socket sslSocket = sslFactory.connectSocket(null, HOSTNAME, HTTPS_PORT, null, 0, new BasicHttpParams());

client.bind(sslSocket, new BasicHttpParams());
HttpGet method = new HttpGet(URL);
client.sendRequestHeader(method);
//antwoord hier afhandelen

Dit levert een java.net.SocketException: Permission denied, op regel 5.

Gebruik maken van DefaultHttpClient en SchemeRegistry:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
SSLSocketFactory sslFactory = SSLSocketFactory.getSocketFactory();
sslFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

Scheme https = new Scheme("https", (SocketFactory) sslFactory, HTTPS_PORT);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(https);

connectionMann = new SingleClientConnManager(null, schemeRegistry);
DefaultHttpClient  client = new DefaultHttpClient(connectionMann, null);

HttpGet method = new HttpGet(URL);
HttpResponse response = client.execute(method);
//antwoord hier afhandelen

Dit levert een java.net.UnknownHostException (regel 12) op met als toevoeging de host die ik probeer te bereiken.

Direct gebruik maken van Socket:
Java:
1
2
3
4
5
6
7
8
9
10
SSLSocketFactory sslFactory = SSLSocketFactory.getSocketFactory();
sslFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Socket sslSocket = sslFactory.connectSocket(null, HOSTNAME, HTTPS_PORT, null, 0, new BasicHttpParams());
    
InputStream in = sslSocket.getInputStream();
OutputStream out = sslSocket.getOutputStream();
            
out.write(url.getBytes());
out.flush();
//in gebruiken om antwoord af te handelen

Dit levert een java.net.SocketException: Permission denied, op regel 3.

Ik kon uit de documentatie van Android niet echt wijsworden wat ik nou met HttpParams aan moet. Soms mag een HttpParams als parameter niet null zijn, dus dan heb ik maar gewoon een nieuwe BasicHttpParams meegegeven, iets anders kon ik niet verzinnen. Ik weet ook niks van het verschil tussen een Client en een Connection, die in principe de zelfde functie hebben als ik kijk naar de methodes die in documentatie staan.

Ik heb geprobeerd hier iets over op te zoeken met Google, maar erg veel succes had ik niet. Misschien dat iemand van jullie het beter kan? ;) De enige goede documentatie die ik kon vinden over dit onderwerp staat hier.

Zelf bezit ik nog geen Android telefoon, ik doe daarom al mijn tests op een emulator, al denk ik niet dat dat van invloed is op de resultaten.

Groeten, Thomas.

  • noNamer
  • Registratie: juli 2000
  • Niet online
Zonder verder naar je code gekeken te hebben, maar heb je wel in je Manifest opgegeven dat je de permissies hiervoor wilt hebben?

http://developer.android.....permission.html#INTERNET

  • Stay1ed
  • Registratie: oktober 2008
  • Laatst online: 16-09 15:39
Bedankt, dat heeft in ieder geval al iets opgelost :). Nu zijn er weer andere bugs die geplet moeten worden voordat het werkt, de gebruikelijke gang van zaken ;).

Even voor anderen met dit probleem: in de AndroidManifest.xml moet komen te staan
XML:
1
<uses-permission android:name="android.permission.INTERNET" />


edit: Ook de laatste bugs zijn verholpen, ik kan nu met mijn applicatie checken of een userid in gebruik is.

[Voor 14% gewijzigd door Stay1ed op 23-10-2010 19:19]



Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee