Ответ Олега, конечно, правильный, я просто хотел разместить информацию прямо здесь, на случай, если ссылка испортится. В коде, который создает HttpClient, я использую этот код, чтобы позволить ему использовать мою фабрику сокетов:
CustomSocketFactory socketFactory = new CustomSocketFactory();
Scheme scheme = new Scheme("http", 80, socketFactory);
httpclient.getConnectionManager().getSchemeRegistry().register(scheme);
CustomSocketFactory
- моя собственная фабрика сокетов, и я хочу использовать ее для обычного HTTP-трафика, поэтому я использую "http"
и 80
в качестве параметров.
Мой CustomSchemeSocketFactory выглядит примерно так:
public class CustomSchemeSocketFactory implements SchemeSocketFactory {
@Override
public Socket connectSocket( Socket socket, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpParams params ) throws IOException, UnknownHostException, ConnectTimeoutException {
if (localAddress != null) {
socket.setReuseAddress(HttpConnectionParams.getSoReuseaddr(params));
socket.bind(localAddress);
}
int connTimeout = HttpConnectionParams.getConnectionTimeout(params);
int soTimeout = HttpConnectionParams.getSoTimeout(params);
try {
socket.setSoTimeout(soTimeout);
socket.connect(remoteAddress, connTimeout );
} catch (SocketTimeoutException ex) {
throw new ConnectTimeoutException("Connect to " + remoteAddress + " timed out");
}
return socket;
}
@Override
public Socket createSocket( HttpParams params ) throws IOException {
// create my own socket and return it
}
@Override
public boolean isSecure( Socket socket ) throws IllegalArgumentException {
return false;
}
}