HTTP プロキシか Socks プロキシかをテストするプロキシのリストがありますが、以下の Java コードは、connection.getContent() または connection.getInputStream() を呼び出すとハングします。この問題は、プロキシ サーバーが応答せず、コードがサーバーからの応答を待機しているときにブロックされることがわかりました。サーバーが応答しないときに、このコードが永久にハング/ブロックするのを防ぐにはどうすればよいですか。次のプロキシをチェックできます。
import java.io.*;
import java.net.*;
import java.util.*;
public class ProxyTest {
public static void main(String[] args) throws IOException {
InetSocketAddress proxyAddress = new InetSocketAddress("myproxyaddress", 1234);
Proxy.Type proxyType = detectProxyType(proxyAddress);
}
public static Proxy.Type detectProxyType(InetSocketAddress proxyAddress) throws IOException {
URL url = new URL("http://www.google.com/");
List<Proxy.Type> proxyTypesToTry = Arrays.asList(Proxy.Type.SOCKS, Proxy.Type.HTTP);
for(Proxy.Type proxyType : proxyTypesToTry) {
Proxy proxy = new Proxy(proxyType, proxyAddress);
URLConnection connection = null;
try {
connection = url.openConnection(proxy);
connection.setConnectTimeout(10000);
connection.setReadTimeout(10000);
connection.getContent();
//connection.getInputStream();
return(proxyType);
}
catch (SocketException e) {
e.printStackTrace();
}
}
return(null);
}
}