Как я могу обойти неразрешенную ошибку имени хоста или нераспознанного имени с помощью HTTP (S) в Java или Python?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как я могу обойти неразрешенную ошибку имени хоста или нераспознанного имени с помощью HTTP (S) в Java или Python?

Сообщение Anonymous »

Я пытаюсь получить доступ к информации веб-сайта программным способом, но ни на Java, ни на Python не удается разрешить имя хоста. Если я укажу IP-адрес, ошибка изменится на TLSV1_UNRECOGNIZED_NAME. Однако этот веб-сайт можно решить без каких-либо дополнительных действий через любой браузер.
Я просмотрел здесь множество потенциальных решений, но для Python говорится, что эта проблема должна была быть решена в 2.7 или 2.8, но я использую 3.10 и все еще получаю эту ошибку. В Java утверждается, что это известная ошибка, но представленные решения, такие как удаление заголовка SNI с помощью параметра компиляции или передача пустого массива имен хостов в HTTPSURLConnection для отмены создания заголовка SNI, не решают проблему. Я также попробовал установить пользовательский агент на Mozilla, как предложено в ответе здесь, но это тоже ничего не изменило.
Я уверен, что на этом веб-сайте есть что-то необычное, но он не принадлежит мне, поэтому я не могу подробно проверить его конфигурацию.
В частности, я пытаюсь просмотреть веб-сайт:
URL -> https://epic7db.com/heroes
IP -> 157.230.84.20
DNS Lookup -> https://www.nslookup.io/domains/epic7db.com/webservers/

При локальном использовании nslookup я получаю ответ:
nslookup epic7db.com
Server: UnKnown
Address: 10.0.0.1

Non-authoritative answer:
Name: epic7db.com
Address: 157.230.84.20

Буду признателен за любую помощь, поскольку я, по сути, швыряю вещи в стену, чтобы посмотреть, что прилипнет на этом этапе.
РЕДАКТИРОВАТЬ: Добавление примеров кодаПитон:
import requests

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36'} # This is chrome, you can set whatever browser you like
url = 'https://epic7db.com'
a = requests.get(url,headers)
print(a.content)

Kotlin использует Java HttpsUrlConnection:
import http.SSLSocketFactoryWrapper
import java.net.URL
import javax.net.ssl.*

fun main() {

HttpsURLConnection.setDefaultHostnameVerifier { hostName, session -> true }
val url = URL("https://epic7db.com")
val sslParameters = SSLParameters()
val sniHostNames: MutableList = ArrayList(1)
// sniHostNames.add(SNIHostName(url.getHost()))
sslParameters.setServerNames(sniHostNames as List?)
val wrappedSSLSocketFactory: SSLSocketFactory =
SSLSocketFactoryWrapper(SSLContext.getDefault().socketFactory, sslParameters)
HttpsURLConnection.setDefaultSSLSocketFactory(wrappedSSLSocketFactory)

val conn = url.openConnection() as HttpsURLConnection
conn.hostnameVerifier = HostnameVerifier { s: String?, sslSession: SSLSession? -> true }
println(String(conn.inputStream.readAllBytes()))
}

Предлагаемый вспомогательный класс в Kotlin/Java:
package http;

import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;

public class SSLSocketFactoryWrapper extends SSLSocketFactory {

private final SSLSocketFactory wrappedFactory;
private final SSLParameters sslParameters;

public SSLSocketFactoryWrapper(SSLSocketFactory factory, SSLParameters sslParameters) {
this.wrappedFactory = factory;
this.sslParameters = sslParameters;
}

@Override
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
SSLSocket socket = (SSLSocket) wrappedFactory.createSocket(host, port);
setParameters(socket);
return socket;
}

@Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort)
throws IOException, UnknownHostException {
SSLSocket socket = (SSLSocket) wrappedFactory.createSocket(host, port, localHost, localPort);
setParameters(socket);
return socket;
}

@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
SSLSocket socket = (SSLSocket) wrappedFactory.createSocket(host, port);
setParameters(socket);
return socket;
}

@Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
SSLSocket socket = (SSLSocket) wrappedFactory.createSocket(address, port, localAddress, localPort);
setParameters(socket);
return socket;

}

@Override
public Socket createSocket() throws IOException {
SSLSocket socket = (SSLSocket) wrappedFactory.createSocket();
setParameters(socket);
return socket;
}

@Override
public String[] getDefaultCipherSuites() {
return wrappedFactory.getDefaultCipherSuites();
}

@Override
public String[] getSupportedCipherSuites() {
return wrappedFactory.getSupportedCipherSuites();
}

@Override
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
SSLSocket socket = (SSLSocket) wrappedFactory.createSocket(s, host, port, autoClose);
setParameters(socket);
return socket;
}

private void setParameters(SSLSocket socket) {
socket.setSSLParameters(sslParameters);
}

}


Подробнее здесь: https://stackoverflow.com/questions/788 ... -using-htt
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»