Самый простой способ получить страницу SSL через прокси в Java

StackOverflow https://stackoverflow.com/questions/564550

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top