[Java] Utilisez jsoup pour accéder à HTTPS via un proxy nécessitant une authentification

Aperçu

J'ai dû y accéder via un proxy utilisant jsoup, mais c'était difficile de manière inattendue.

Les points sont les deux points suivants.

environnement

jsoup

pom.xml


<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.12.1</version>
</dependency>

Version Java: 8

OK exemple

//Annulez le paramètre «Interdire l'accès HTTPS via un proxy nécessitant une authentification».
//Par défaut cette propriété"Basic"Est spécifié et l'authentification de base ne peut pas être utilisée."Basic"Remplacez par un caractère vide pour annuler le réglage de.
System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");

//ID du serveur proxy/Assurez-vous de transmettre le mot de passe via Authenticator.
Authenticator.setDefault(new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("{ID utilisateur du serveur proxy}", "{Mot de passe du serveur proxy}".toCharArray());
    }
});

Jsoup.connect("{URL à laquelle vous souhaitez accéder}")
  .proxy("{ID du serveur proxy ou nom d'hôte}", {Numéro de port du serveur proxy})
  .get();

Exemple NG

//Version qui utilise l'en-tête d'autorisation Partie 1
Jsoup.connect("{URL à laquelle vous souhaitez accéder}")
  .header("Authorization", "Basic " + Base64.getEncoder().encodeToString("{ID utilisateur du serveur proxy}:{Mot de passe du serveur proxy}".getBytes()))
  .proxy("{Adresse IP ou nom d'hôte du serveur proxy}", {Numéro de port du serveur proxy})
  .get();
//Version 2 qui utilise l'en-tête Authorization (dans la valeur d'en-tête"Basic "Ne spécifiez pas la chaîne de caractères de)
Jsoup.connect("{URL à laquelle vous souhaitez accéder}")
  .header("Authorization", Base64.getEncoder().encodeToString("{ID utilisateur du serveur proxy}:{Mot de passe du serveur proxy}".getBytes()))
  .proxy("{Adresse IP ou nom d'hôte du serveur proxy}", {Numéro de port du serveur proxy})
  .get();
// Proxy-Version qui utilise l'en-tête d'autorisation Partie 1
Jsoup.connect("{URL à laquelle vous souhaitez accéder}")
  .header("Proxy-Authorization", "Basic " + Base64.getEncoder().encodeToString("{ID utilisateur du serveur proxy}:{Mot de passe du serveur proxy}".getBytes()))
  .proxy("{Adresse IP ou nom d'hôte du serveur proxy}", {Numéro de port du serveur proxy})
  .get();
// Proxy-Version 2 qui utilise l'en-tête Authorization (dans la valeur d'en-tête"Basic "Ne spécifiez pas la chaîne de caractères de)
Jsoup.connect("{URL à laquelle vous souhaitez accéder}")
  .header("Proxy-Authorization", Base64.getEncoder().encodeToString("{ID utilisateur du serveur proxy}:{Mot de passe du serveur proxy}".getBytes()))
  .proxy("{Adresse IP ou nom d'hôte du serveur proxy}", {Numéro de port du serveur proxy})
  .get();
// 「jdk.http.auth.tunneling."Schémas désactivés" n'est pas spécifié

Authenticator.setDefault(new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("{ID utilisateur du serveur proxy}", "{Mot de passe du serveur proxy}".toCharArray());
    }
});

Jsoup.connect("{URL à laquelle vous souhaitez accéder}")
  .proxy("{ID du serveur proxy ou nom d'hôte}", {Numéro de port du serveur proxy})
  .get();

Dans les deux cas, l'erreur suivante s'est produite.

java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"

Référence (merci)

C'était très utile! Je vous remercie! https://qiita.com/kaakaa_hoe/items/d4fb11a3af035a287972

Recommended Posts

[Java] Utilisez jsoup pour accéder à HTTPS via un proxy nécessitant une authentification
Erreur 407 lors de la tentative d'accès au site HTTPS via un proxy authentifié en Java
Comment configurer un proxy avec authentification dans Feign
Étudiez Java: utilisez Timer pour créer quelque chose comme un minuteur de bombe
Une histoire de malentendu sur l'utilisation du scanner Java (mémo)
Comment utiliser java Facultatif
Comment utiliser la classe Java
[Java] Comment utiliser removeAll ()
Comment utiliser Java Map
[java] Raisons d'utiliser statique
Comment utiliser les variables Java
Une histoire que j'ai eu du mal à défier le pro de la concurrence avec Java
Je souhaite utiliser le balayage arrière sur un écran qui utilise XLPagerTabStrip
Comment implémenter un travail qui utilise l'API Java dans JobScheduler
L'opérateur qui est né pour naître, instanceof (Java) ~ Comment utiliser l'opérateur instanceof ~