Я использую JAVA Class HttpsURLConnection
для получения контента с веб-сайта HTTPS. Я использую свой SSLSocketFactory
.
Фрагмент кода ниже:
HttpsURLConnection conn = (HttpsURLConnection) new java.net.URL("https", google.com, 443, "/").openConnection();
conn.setHostnameVerifier(new hver());
conn.setReadTimeout(0);
conn.setSSLSocketFactory(my.sslSocketFactory);//mine
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
Если вы видите первый метод createSocket(...)
, HttpsURLConnection
сам создает объект Socket
'so' и передает его в качестве параметра. Есть ли способ создать этот «так» объект из моего кода. Другими словами, могу ли я заставить HttpsURLConnection
вызывать другие createSocket()
методы, которые принимают только порт хоста в качестве параметра. Я хочу сделать исходный объект сокета только из моего кода.
public class CustomSocketFactoty extends SSLSocketFactory {
// method 1
@Override
public Socket createSocket(*Socket so*, String host, int port,
boolean autoClose) throws IOException {
// HttpsURLConnection itself creating ( in parameter )socket object Socket so and passing it here , Instead I want to create that Socket object so from my code.
// it is called from - conn.connect();
return ...;
}
@Override
public Socket createSocket(String host, int port) throws IOException,
UnknownHostException {
// This method never called
return ...;
}
@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
// This method never called
return ...;
}
@Override
public Socket createSocket(InetAddress address, int port,
InetAddress localAddress, int localPort) throws IOException {
// This method never called
return ...;
}
@Override
public Socket createSocket(InetAddress address, int port,
InetAddress localAddress, int localPort) throws IOException {
// This method never called
return ...;
}
}
Спасибо