Я пытаюсь создать класс, который поможет мне управлять прокси-серверами в программе. Я хочу использовать HTTP-клиент Apache, чтобы проверить, активен ли прокси-сервер и доступен ли он, в каком часовом поясе он находится. В настоящее время класс зависит от HTTP-клиента Apache и org.json. Всякий раз, когда я пытаюсь использовать аутентифицированный прокси-сервер, он выдает следующее:
Checking proxy global.711proxy.com:10000
Proxy check failed: Remote host terminated the handshake
Proxy is dead or not in USA. Timezone: null
Вот мой класс. Все остальное работает как задумано.
import org.json.JSONObject;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.client5.http.classic.methods.HttpGet;
public class Proxy {
private String host;
private int port;
private String username;
private String password;
private boolean isAuth;
private boolean isLive;
private String timezone;
public Proxy(String proxyString) {
parseProxy(proxyString);
checkProxy();
}
private void parseProxy(String proxyString) {
String[] parts = proxyString.split(":");
if (parts.length < 2 || parts.length > 4) {
throw new IllegalArgumentException("Invalid proxy format. Use host:port or host:port:user:pass");
}
this.host = parts[0];
this.port = Integer.parseInt(parts[1]);
if (parts.length == 4) {
this.username = parts[2];
this.password = parts[3];
this.isAuth = true;
} else {
this.isAuth = false;
}
}
private void checkProxy() {
try {
System.out.println("Checking proxy " + host + ":" + port);
// Define target and proxy hosts
final HttpHost target = new HttpHost("https", "worldtimeapi.org", 443);
final HttpHost proxy = new HttpHost("http", host, port);
// Build client based on authentication needs
final CloseableHttpClient httpClient;
if (isAuth) {
// With authentication
BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope(host, port),
new UsernamePasswordCredentials(username, password.toCharArray())
);
httpClient = HttpClients.custom()
.setProxy(proxy)
.setDefaultCredentialsProvider(credsProvider)
.build();
} else {
// Without authentication
httpClient = HttpClients.custom()
.setProxy(proxy)
.build();
}
try {
final HttpGet request = new HttpGet("/api/ip");
httpClient.execute(target, request, response -> {
this.isLive = (response.getCode() >= 200 && response.getCode() < 400);
if (this.isLive) {
String jsonStr = EntityUtils.toString(response.getEntity());
JSONObject json = new JSONObject(jsonStr);
this.timezone = json.getString("timezone");
System.out.println("Proxy check successful. Timezone: " + timezone);
}
return null;
});
} finally {
httpClient.close();
}
} catch (Exception e) {
System.err.println("Proxy check failed: " + e.getMessage());
this.isLive = false;
this.timezone = null;
}
}
public String getHost() {
return host;
}
public int getPort() {
return port;
}
public boolean isAuth() {
return isAuth;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public boolean isLive() {
return isLive;
}
public String getTimezone() {
return timezone;
}
public void recheckLive() {
checkProxy();
}
@Override
public String toString() {
return String.format("Proxy{host='%s', port=%d, auth=%b, live=%b}",
host, port, isAuth, isLive);
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... entication
HTTP-клиент Java Apache с аутентификацией прокси-сервера ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1735586283
Anonymous
Я пытаюсь создать класс, который поможет мне управлять прокси-серверами в программе. Я хочу использовать HTTP-клиент Apache, чтобы проверить, активен ли прокси-сервер и доступен ли он, в каком часовом поясе он находится. В настоящее время класс зависит от HTTP-клиента Apache и org.json. Всякий раз, когда я пытаюсь использовать аутентифицированный прокси-сервер, он выдает следующее:
Checking proxy global.711proxy.com:10000
Proxy check failed: Remote host terminated the handshake
Proxy is dead or not in USA. Timezone: null
Вот мой класс. Все остальное работает как задумано.
import org.json.JSONObject;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.client5.http.classic.methods.HttpGet;
public class Proxy {
private String host;
private int port;
private String username;
private String password;
private boolean isAuth;
private boolean isLive;
private String timezone;
public Proxy(String proxyString) {
parseProxy(proxyString);
checkProxy();
}
private void parseProxy(String proxyString) {
String[] parts = proxyString.split(":");
if (parts.length < 2 || parts.length > 4) {
throw new IllegalArgumentException("Invalid proxy format. Use host:port or host:port:user:pass");
}
this.host = parts[0];
this.port = Integer.parseInt(parts[1]);
if (parts.length == 4) {
this.username = parts[2];
this.password = parts[3];
this.isAuth = true;
} else {
this.isAuth = false;
}
}
private void checkProxy() {
try {
System.out.println("Checking proxy " + host + ":" + port);
// Define target and proxy hosts
final HttpHost target = new HttpHost("https", "worldtimeapi.org", 443);
final HttpHost proxy = new HttpHost("http", host, port);
// Build client based on authentication needs
final CloseableHttpClient httpClient;
if (isAuth) {
// With authentication
BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope(host, port),
new UsernamePasswordCredentials(username, password.toCharArray())
);
httpClient = HttpClients.custom()
.setProxy(proxy)
.setDefaultCredentialsProvider(credsProvider)
.build();
} else {
// Without authentication
httpClient = HttpClients.custom()
.setProxy(proxy)
.build();
}
try {
final HttpGet request = new HttpGet("/api/ip");
httpClient.execute(target, request, response -> {
this.isLive = (response.getCode() >= 200 && response.getCode() < 400);
if (this.isLive) {
String jsonStr = EntityUtils.toString(response.getEntity());
JSONObject json = new JSONObject(jsonStr);
this.timezone = json.getString("timezone");
System.out.println("Proxy check successful. Timezone: " + timezone);
}
return null;
});
} finally {
httpClient.close();
}
} catch (Exception e) {
System.err.println("Proxy check failed: " + e.getMessage());
this.isLive = false;
this.timezone = null;
}
}
public String getHost() {
return host;
}
public int getPort() {
return port;
}
public boolean isAuth() {
return isAuth;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public boolean isLive() {
return isLive;
}
public String getTimezone() {
return timezone;
}
public void recheckLive() {
checkProxy();
}
@Override
public String toString() {
return String.format("Proxy{host='%s', port=%d, auth=%b, live=%b}",
host, port, isAuth, isLive);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79318426/java-apache-http-client-with-proxy-authentication[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия