Использование прокси с авторизацией в Java

Использование прокси с авторизацией в Java

Оказывается все очень просто.

Код авторизации состоит всего из 3 строк (в идеале можно обойтись одной):

String auth = proxyLogin + ":" + proxyPass;
String encodedPassword = new String(Base64.encode(auth.getBytes()));
urlConn.setRequestProperty("Proxy-Authorization", "Basic " + encodedPassword);

Из сложностей: нам нужно будет закодировать заголовок c авторизацией в Base64. Для этого мы воспользуемся стандартной бибилиотекой явы, правда она объявлена как private, поэтому качаем отсюда немного модифицированную. Затем положем ее в основную директорию программы (рядом с основным скриптом).

Для наглядности я написал небольшую программу выполняющую проверку прокси.
Собственно код:

package ru.pheodor.testproxyauth;

import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.SocketAddress;
import java.net.URL;


public class ProxyAuth {
	
	private final static String testSite = "http://yandex.ru/";
	
	public static void main(String argv[]) {
		String proxyHost = "188.40.12.17"; // Прокси IP
		int proxyPort = 8080;              // Прокси порт
		String proxyLogin = "root";        // Прокси логин
		String proxyPass = "password";     // Прокси пароль
		
		// Инициализируем функцию проверки прокси
		boolean res = TestProxy(proxyHost, proxyPort, proxyLogin, proxyPass);
		System.out.print(proxyHost + ":" + proxyPort + " " + (res ? "ALIVE" : "DEAD"));
	}
	
	public static boolean TestProxy(String proxyHost, int proxyPort, String proxyLogin, 
			String proxyPass) {
		SocketAddress proxyAddr = new InetSocketAddress(proxyHost, proxyPort);
		Proxy httpProxy = new Proxy(Proxy.Type.HTTP, proxyAddr);
		HttpURLConnection urlConn = null;
		URL url;
		try {
			url = new URL(testSite);
			urlConn = (HttpURLConnection) url.openConnection(httpProxy);
			
			// Объединяем логин с паролем
			String auth = proxyLogin + ":" + proxyPass;
			
			// Кодируем в Base64
		        String encodedPassword = new String(Base64.encode(auth.getBytes()));
		    
		        // Устанавливаем заголовок
			urlConn.setRequestProperty("Proxy-Authorization", "Basic " 
					+ encodedPassword);
			
			urlConn.setConnectTimeout(10 * 1000);
			urlConn.setReadTimeout(10 * 1000);
			urlConn.connect();
			return (urlConn.getResponseCode() == 200);
		}
		catch(Exception e) {
			return false;
		}
	}

}

Исходник здесь.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *