1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.httpclient;
16
17 import java.io.IOException;
18 import java.net.InetSocketAddress;
19 import java.net.Proxy;
20 import java.net.Socket;
21
22 import org.apache.http.HttpHost;
23 import org.apache.http.conn.socket.PlainConnectionSocketFactory;
24 import org.apache.http.protocol.HttpContext;
25
26
27
28
29
30
31
32
33 public class SocksConnectionSocketFactory extends PlainConnectionSocketFactory {
34 private static final String SOCKS_PROXY = "htmlunit.socksproxy";
35
36
37
38
39
40
41 public static void setSocksProxy(final HttpContext context, final HttpHost socksProxy) {
42 context.setAttribute(SOCKS_PROXY, socksProxy);
43 }
44
45 static HttpHost getSocksProxy(final HttpContext context) {
46 return (HttpHost) context.getAttribute(SOCKS_PROXY);
47 }
48
49 static Socket createSocketWithSocksProxy(final HttpHost socksProxy) {
50 final InetSocketAddress address = new InetSocketAddress(socksProxy.getHostName(), socksProxy.getPort());
51 final Proxy proxy = new Proxy(Proxy.Type.SOCKS, address);
52 return new Socket(proxy);
53 }
54
55
56
57
58 @Override
59 public Socket createSocket(final HttpContext context) throws IOException {
60 final HttpHost socksProxy = getSocksProxy(context);
61 if (socksProxy != null) {
62 return createSocketWithSocksProxy(socksProxy);
63 }
64 return super.createSocket(context);
65 }
66 }