如何检查代理是否在Java中工作?

时间:2011-11-06 22:28:21

标签: java sockets networking proxy connection

我搜索了谷歌,这个网站和JavaRanch,我找不到答案。

我的程序需要从所选文件中获取代理(我使用java gui FileChooser类和RandomAccessFile完成了)

然后我需要验证从txt文件中第一个开始的代理。它将尝试连接到某个站点或端口以验证连接是否成功。如果连接成功(我得到了肯定的响应),它会将代理添加到代理列表中,然后获取并检查列表中的下一个直到完成。

我知道怎么做但我遇到了一点问题。我的问题是这个过程需要独立于连接速度,因为有人可能会为要处理的连接设置15000(毫秒)超时并设置100个线程,然后没有任何代理会因为连接速度太慢而无法正常工作。 / p>

我听说过一种名为pinging的方法来检查代理,但我不知道如何在java中使用它。

任何人都可以给我解决方案或至少我可以使用的课程。

1 个答案:

答案 0 :(得分:9)

好的,我找到了一个解决方案,很容易。

我使用它InetAddress.isReachable()方法以及Apache的一些HttpClient。对于代理检查,我使用了blanksite.com,因为我只需要检查可连接性而不是代理速度。

所以这里是代码(包括来自文件的输入,但它不是gui,YET):

/* compile with 
   java -cp .;httpclient-4.5.1.jar;httpcore-4.4.3.jar ProxyMat
   run with
   java -cp .;httpclient-4.5.1.jar;httpcore-4.4.3.jar;commons-logging-1.2.jar ProxyMat
   put one proxy to check per line in the proxies.txt file in the form
   some.host.com:8080
*/
import java.io.File;
import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
import java.net.InetAddress;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.client.DefaultHttpClient;

public class ProxyMat{

    File file=null;
    static RandomAccessFile read=null;      
    public ProxyMat(){
        file=new File("proxies.txt");
        try {
            read=new RandomAccessFile(file,"rw");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public void checkproxies(){
        try{
            String line;
            for(int i=0;i<25;i++){
                if((line=read.readLine())!=null){
                    System.out.println(line);
                    String[] hp=line.split(":");
                    InetAddress addr=InetAddress.getByName(hp[0]);
                    if(addr.isReachable(5000)){
                        System.out.println("reached");
                        ensocketize(hp[0],Integer.parseInt(hp[1]));
                    }
                }
            }
        }catch(Exception ex){ex.printStackTrace();}
    }



    public void ensocketize(String host,int port){
        try{
            File pros=new File("working.txt");
            HttpClient client=new DefaultHttpClient();
            HttpGet get=new HttpGet("http://blanksite.com/");
            HttpHost proxy=new HttpHost(host,port);
            client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
            client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 15000);
            HttpResponse response=client.execute(get);
            HttpEntity enti=response.getEntity();
            if(response!=null){
                System.out.println(response.getStatusLine());
                System.out.println(response.toString());
                System.out.println(host+":"+port+" @@ working");
            }
        }catch(Exception ex){System.out.println("Proxy failed");}
    }

    public static void main(String[] args){
        ProxyMat mat=new ProxyMat();
        mat.checkproxies();
    }
}