Ответ 1
Прежде всего, в соответствии с "Руководство по свойствам системы" .
Предупреждение. Изменение системных свойств потенциально опасно и следует делать с усмотрением. Многие свойства системы не перечитываются после запуска и находятся в информационных целях. Изменение некоторых свойства могут иметь неожиданные побочные эффекты.
И мой опыт говорит, что при изменении свойств *.proxyHost
у вас могут возникнуть неприятные проблемы в вашей системе. Поэтому я не рекомендую вам изменять системные свойства для этой задачи.
Намного лучше использовать что-то вроде:
//Proxy instance, proxy ip = 127.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8080));
conn = new URL(urlString).openConnection(proxy);
и авторизация на прокси:
Authenticator authenticator = new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user",
"mypassword".toCharArray());
}
};
Authenticator.setDefault(authenticator);
Теперь вернитесь к основным вопросам:
A. "proxy.mycompany1.local" - это просто пример. Вы можете использовать любое имя хоста
B. Ключ класса использует класс java.net.PlainSocketImpl через Socket. Он пытается разрешить прокси-имя хоста 'abcd'
, усвоить ошибку и перейти прямо в google. Просто попробуйте сыграть с этим кодом:
import java.net.*;
import java.io.*;
public class RequestURI {
public static void main(String[] args) {
int port = 8181;
long startTime = System.currentTimeMillis();
try {
// System.getProperties().setProperty("http.proxyHost", "abcd");
// System.getProperties().setProperty("http.proxyPort", Integer.toString(port));
URL url = new URL("http://google.com");
HttpURLConnection uc = (HttpURLConnection) url.openConnection();
int resp = uc.getResponseCode();
if (resp != 200) {
throw new RuntimeException("Failed: Fragment is being passed as part of the RequestURI");
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Run time in ms ="+ (System.currentTimeMillis() - startTime));
}
}
Вы можете видеть, что время запуска больше, когда вы раскомментируете раздел с setProperty
. Неудачная попытка разрешить имя хоста увеличивает время выполнения.