Si le côté serveur prend en charge l'authentification de base, vous pouvez y accéder avec l'URL suivante (l'URL suivante est factice pour l'article).
http://username:[email protected]
Frapper avec curl retournera le résultat attendu comme indiqué ci-dessous.
$ curl http://username:[email protected]
Faire cela avec une URLConnection Java échouera.
URL url = new URL("http://username:[email protected]");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream(); //Échouer ici
Sur Android, j'obtiens l'exception suivante.
java.io.FileNotFoundException: http://username:[email protected]
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:250)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java)
at com.example.ogata.Test$1.run(Test.java:53)
Java donne les exceptions suivantes:
java.io.IOException: Server returned HTTP response code: 401 for URL: http://username:[email protected]
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1876)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at Test$1.run(Test.java:31)
En Java, l'authentification de base à l'aide d'URLConnection est effectuée comme suit.
URL url = new URL("http://example.com");
URLConnection conn = url.openConnection();
conn.setRequestProperty("Authorization", "Basic " + Base64.encodeToString("username:password".getBytes(), Base64.NO_WRAP));
// conn.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString("username:password".getBytes()));
InputStream is = conn.getInputStream();
L'API Base64 est légèrement différente pour Android et Java 8. La ligne commentée ci-dessus est Java 8.
Recommended Posts