Ich musste über einen Proxy mit jsoup darauf zugreifen, aber es war unerwartet schwierig.
Die Punkte sind die folgenden zwei Punkte.
jsoup
pom.xml
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
Java-Version: 8
//Brechen Sie die Einstellung "HTTPS-Zugriff über einen Proxy verbieten, für den eine Authentifizierung erforderlich ist" ab.
//Standardmäßig diese Eigenschaft"Basic"Wird angegeben und die Standardauthentifizierung kann nicht verwendet werden."Basic"Überschreiben Sie mit einem Leerzeichen, um die Einstellung von abzubrechen.
System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");
//Proxy-Server-ID/Stellen Sie sicher, dass Sie das Passwort über Authenticator übergeben.
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("{Proxy-Server-Benutzer-ID}", "{Proxy-Server-Passwort}".toCharArray());
}
});
Jsoup.connect("{URL, auf die Sie zugreifen möchten}")
.proxy("{Proxyserver-ID oder Hostname}", {Portnummer des Proxyservers})
.get();
//Version, die den Autorisierungsheader Teil 1 verwendet
Jsoup.connect("{URL, auf die Sie zugreifen möchten}")
.header("Authorization", "Basic " + Base64.getEncoder().encodeToString("{Proxy-Server-Benutzer-ID}:{Proxy-Server-Passwort}".getBytes()))
.proxy("{IP-Adresse oder Hostname des Proxyservers}", {Portnummer des Proxyservers})
.get();
//Version, die den Autorisierungsheader Teil 2 verwendet (im Wert des Headers"Basic "Geben Sie nicht die Zeichenfolge von) an.
Jsoup.connect("{URL, auf die Sie zugreifen möchten}")
.header("Authorization", Base64.getEncoder().encodeToString("{Proxy-Server-Benutzer-ID}:{Proxy-Server-Passwort}".getBytes()))
.proxy("{IP-Adresse oder Hostname des Proxyservers}", {Portnummer des Proxyservers})
.get();
// Proxy-Version, die den Autorisierungsheader Teil 1 verwendet
Jsoup.connect("{URL, auf die Sie zugreifen möchten}")
.header("Proxy-Authorization", "Basic " + Base64.getEncoder().encodeToString("{Proxy-Server-Benutzer-ID}:{Proxy-Server-Passwort}".getBytes()))
.proxy("{IP-Adresse oder Hostname des Proxyservers}", {Portnummer des Proxyservers})
.get();
// Proxy-Version, die den Autorisierungsheader Teil 2 verwendet (im Wert des Headers"Basic "Geben Sie nicht die Zeichenfolge von) an.
Jsoup.connect("{URL, auf die Sie zugreifen möchten}")
.header("Proxy-Authorization", Base64.getEncoder().encodeToString("{Proxy-Server-Benutzer-ID}:{Proxy-Server-Passwort}".getBytes()))
.proxy("{IP-Adresse oder Hostname des Proxyservers}", {Portnummer des Proxyservers})
.get();
// 「jdk.http.auth.tunneling."deaktivierte Schemata" ist nicht angegeben
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("{Proxy-Server-Benutzer-ID}", "{Proxy-Server-Passwort}".toCharArray());
}
});
Jsoup.connect("{URL, auf die Sie zugreifen möchten}")
.proxy("{Proxyserver-ID oder Hostname}", {Portnummer des Proxyservers})
.get();
In beiden Fällen ist der folgende Fehler aufgetreten.
java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"
Es war sehr hilfreich! Vielen Dank! https://qiita.com/kaakaa_hoe/items/d4fb11a3af035a287972
Recommended Posts