新增ProxySocketFactory

This commit is contained in:
Looly 2023-09-21 17:19:41 +08:00
parent 86ba812a93
commit bf4833b7ac

View File

@ -0,0 +1,88 @@
package org.dromara.hutool.core.net;
import javax.net.SocketFactory;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Socket;
/**
* 代理Socket工厂用于创建代理Socket<br>
* 来自commons-net的DefaultSocketFactory
*
* @author commons-net, looly
* @since 5.8.23
*/
public class ProxySocketFactory extends SocketFactory {
/**
* 创建代理SocketFactory
* @param proxy 代理对象
* @return {@code ProxySocketFactory}
*/
public static ProxySocketFactory of(final Proxy proxy) {
return new ProxySocketFactory(proxy);
}
private final Proxy proxy;
/**
* 构造
*
* @param proxy Socket代理
*/
public ProxySocketFactory(final Proxy proxy) {
this.proxy = proxy;
}
@Override
public Socket createSocket() {
if (proxy != null) {
return new Socket(proxy);
}
return new Socket();
}
@Override
public Socket createSocket(final InetAddress address, final int port) throws IOException {
if (proxy != null) {
final Socket s = new Socket(proxy);
s.connect(new InetSocketAddress(address, port));
return s;
}
return new Socket(address, port);
}
@Override
public Socket createSocket(final InetAddress address, final int port, final InetAddress localAddr, final int localPort) throws IOException {
if (proxy != null) {
final Socket s = new Socket(proxy);
s.bind(new InetSocketAddress(localAddr, localPort));
s.connect(new InetSocketAddress(address, port));
return s;
}
return new Socket(address, port, localAddr, localPort);
}
@Override
public Socket createSocket(final String host, final int port) throws IOException {
if (proxy != null) {
final Socket s = new Socket(proxy);
s.connect(new InetSocketAddress(host, port));
return s;
}
return new Socket(host, port);
}
@Override
public Socket createSocket(final String host, final int port, final InetAddress localAddr, final int localPort) throws IOException {
if (proxy != null) {
final Socket s = new Socket(proxy);
s.bind(new InetSocketAddress(localAddr, localPort));
s.connect(new InetSocketAddress(host, port));
return s;
}
return new Socket(host, port, localAddr, localPort);
}
}