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:
Dit levert een java.net.SocketException: Permission denied, op regel 5.
Gebruik maken van DefaultHttpClient en SchemeRegistry:
Dit levert een java.net.UnknownHostException (regel 12) op met als toevoeging de host die ik probeer te bereiken.
Direct gebruik maken van Socket:
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.
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?
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.