Hi Oleg,
Got it working with Authentication as well.
I used java.net.Authenticator which provides credentials.
I have placed this Custom Authenticator in my extended
ClientConnectionOperator.
Please have a look at my ClientConnectionOperator code below.
Please let me know if you find any issues with the code.
/public class SocksProxyClientConnOperator extends
DefaultClientConnectionOperator {
private static final Object AUTHENTICATOR_LOCK = new Object();
private SocksProxyAuthenticator socksAuthenticator;
public SocksProxyClientConnOperator(SchemeRegistry schemes) {
super(schemes);
}
public void openConnection(final OperatedClientConnection conn, final
HttpHost target,
final InetAddress local, final HttpContext context, final
HttpParams params) throws IOException {
if (conn == null) {
throw new IllegalArgumentException("Connection may not be
null");
}
if (target == null) {
throw new IllegalArgumentException("Target host may not be
null");
}
if (params == null) {
throw new IllegalArgumentException("Parameters may not be
null");
}
if (conn.isOpen()) {
throw new IllegalStateException("Connection must not be open");
}
SchemeSocketFactory socksSocketFactory = new SocksSocketFactory();
Scheme schm = schemeRegistry.getScheme(target.getSchemeName());
SchemeSocketFactory sf = schm.getSchemeSocketFactory();
InetAddress[] addresses = resolveHostname(target.getHostName());
int port = schm.resolvePort(target.getPort());
Socket sock = socksSocketFactory.createSocket(params);
conn.opening(sock, target);
for (int i = 0; i < addresses.length; i++) {
InetAddress address = addresses[i];
boolean last = i == addresses.length - 1;
InetSocketAddress remoteAddress = new InetSocketAddress(address,
port);
InetSocketAddress localAddress = null;
if (local != null) {
localAddress = new InetSocketAddress(local, 0);
}
try {
Socket connsock = null;
if(this.socksAuthenticator != null){
synchronized (AUTHENTICATOR_LOCK) {
Authenticator.setDefault(this.socksAuthenticator);
connsock = sf.connectSocket(sock, remoteAddress,
localAddress, params);
}
}else{
connsock = sf.connectSocket(sock, remoteAddress,
localAddress,
params);
}
if (sock != connsock) {
sock = connsock;
conn.opening(sock, target);
}
prepareSocket(sock, context, params);
conn.openCompleted(sf.isSecure(sock), params);
break;
} catch (ConnectException ex) {
if (last) {
throw new HttpHostConnectException(target, ex);
}
} catch (ConnectTimeoutException ex) {
if (last) {
throw ex;
}
}
}
}
public SocksProxyAuthenticator getSocksAuthenticator() {
return this.socksAuthenticator;
}
public void setSocksAuthenticator(SocksProxyAuthenticator
socksAuthenticator) {
this.socksAuthenticator = socksAuthenticator;
}
}/
Thanks,
Sachin Survase
--
View this message in context:
http://httpcomponents.10934.n7.nabble.com/How-to-configure-basic-authentication-for-SOCKs-Proxy-tp19030p19118.html
Sent from the HttpClient-User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]