oleg的答案當然是正確的,我只是想直接在這裏提供信息,以防萬一鏈接不好。在創建一個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;
}
}
見 '自定義SSL上下文' Apache的HttpClient的例子http://hc.apache.org/httpcomponents-client-ga/examples.html – oleg