Le point addictif lors de l'authentification de base avec Java URLConnection

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

Le point addictif lors de l'authentification de base avec Java URLConnection
Authentification de base avec Java 11 HttpClient
J'ai essayé de faire une authentification de base avec Java
Calculer le score de similarité des chaînes de caractères avec JAVA
CI l'architecture des applications Java / Kotlin avec ArchUnit
Surveillez l'état interne des programmes Java avec Kubernetes
Vérifiez le comportement de Java Intrinsic Locks avec bpftrace
[Java] Lors de l'écriture du source ... Mémorandum ①
L'histoire de la création de DTO, semblable à Dao avec Java, SQLite
Remplacez seulement une partie de l'hôte URL par java
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
[Java] Simplifiez la mise en œuvre de la gestion de l'historique des données avec Reladomo
Comptez le nombre de chiffres après la virgule décimale en Java
Spécifiez le code de caractère de la source lors de la construction avec Maven
À propos du comportement lors de la création d'un mappage de fichiers avec Java
Assurez-vous de comparer le résultat Java compareTo avec 0
Lisez les données de la base de données de nuages de points de la préfecture de Shizuoka avec Java et générez une photographie aérienne et une élévation PNG.
Lisez les données de Shizuoka Prefecture Point Cloud DB avec Java et essayez de détecter la hauteur de l'arbre.
Gestion de la virgule flottante java Lors de la lecture du livre de référence [Note]
Changer la version de java installée par SDKMAN lors du déplacement de répertoires
[Java1.8 +] Obtenez la date du jour × suivant avec LocalDate
Essayez HelloWorld avec la configuration minimale de Heroku Java spring-boot
Connexion à une base de données avec Java (partie 1) Peut-être la méthode de base
Une histoire sur l'utilisation de l'API League Of Legends avec JAVA
Écraser le téléchargement du fichier avec le même nom avec BOX SDK (java)
La version d'Elasticsearch que vous utilisez est-elle compatible avec Java 11?
Méthode d'enquête lorsque le processeur du serveur exécutant java est lourd
[Java] Supprimer les éléments de la liste
Utiliser l'authentification de base avec Spring Boot
Comprendre le mécanisme de base de log4j2.xml
[Édition Java] Histoire de la sérialisation
À propos de l'authentification par signature avec Java Time 1
Utilisation de base de Java Facultatif Partie 1
[Note] Gestion des points décimaux Java
Flux de traitement de base de Java Stream
[Connaissance de base de Java] Portée des variables
L'origine des expressions Java lambda
Structure de base du code source Java
L'histoire de la création d'un lanceur de jeu avec une fonction de chargement automatique [Java]
Exprimons le résultat de l'analyse du code d'octet Java dans un diagramme de classes
Comment trouver le nombre total de pages lors de la pagination en Java
Vérifiez l'enregistrement MX de l'adresse e-mail avec java et vérifiez le domaine
J'étais coincé avec la gestion des fuseaux horaires lors du formatage avec SimpleDateFormat
[Java] Récupère MimeType à partir du contenu du fichier avec Apathce Tika [Kotlin]
Une description de l'exemple JDBC qui sera utile lors du développement d'un fournisseur d'authentification personnalisé avec le SDK Cognos