Самый простой способ получить страницу SSL через прокси в Java
-
05-09-2019 - |
Вопрос
Я хотел бы получить страницу SSL на Java.Проблема в том, что мне нужно пройти аутентификацию через http-прокси.
Поэтому мне нужен простой способ получить эту страницу.Я попробовал http-клиент Apache Commons, но для моей проблемы это слишком накладно.
Я попробовал этот фрагмент кода, но он не содержит действия аутентификации:
import java.io.*;
import java.net.*;
public class ProxyTest {
public static void main(String[] args) throws ClientProtocolException, IOException {
URL url = new URL("https://ssl.site");
Socket s = new Socket("proxy.address", 8080);
Proxy proxy = new Proxy(Proxy.Type.HTTP, s.getLocalSocketAddress());
URLConnection connection = url.openConnection(proxy);
InputStream inputStream = connection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String tmpLine = "";
while ((tmpLine = br.readLine()) != null) {
System.out.println(tmpLine);
}
}
}
Может ли кто-нибудь предоставить некоторую информацию о том, как это реализовать простым способом?
заранее спасибо
Решение
org.apache.commons.httpclient.HttpClient — ваш друг,
Пример кода из http://hc.apache.org/httpclient-3.x/sslguide.html
HttpClient httpclient = new HttpClient();
httpclient.getHostConfiguration().setProxy("myproxyhost", 8080);
httpclient.getState().setProxyCredentials("my-proxy-realm", " myproxyhost",
new UsernamePasswordCredentials("my-proxy-username", "my-proxy-password"));
GetMethod httpget = new GetMethod("https://www.verisign.com/");
try {
httpclient.executeMethod(httpget);
System.out.println(httpget.getStatusLine());
} finally {
httpget.releaseConnection();
}
Другие советы
Вам необходимо установить java.net.Аутентификатор прежде чем открыть соединение:
...
public static void main(String[] args) throws Exception {
// Set the username and password in a manner which doesn't leave it visible.
final String username = Console.readLine("[%s]", "Proxy Username");
final char[] password = Console.readPassword("[%s"], "Proxy Password:");
// Use a anonymous class for our authenticator for brevity
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
URL url = new URL("https://ssl.site");
...
}
Чтобы удалить аутентификатор после завершения, вызовите следующий код:
Authenticator.setDefault(null);
Аутентификатор в Java SE 6 поддерживает HTTP Basic
, HTTP Digest
и NTLM
.Для получения дополнительной информации см. HTTP-аутентификация документация на sun.com
с apache commons-http-client 4:вы найдете много примеров @ http://svn.apache.org/repos/asf/httpcomComponents/httpclient/trunk/module-client/src/examples/org/apache/http/examples/client/