Как проверить, работает ли прокси в Java? - PullRequest
7 голосов
/ 07 ноября 2011

Я искал в Google, на этом сайте и в JavaRanch, и не могу найти ответ.

Моей программе необходимо получить прокси из выбранного файла (я сделал это с помощью класса java gui FileChooser и RandomAccessFile)

Затем мне нужно проверить прокси, начиная с того, который находится первым в текстовом файле.Он попытается подключиться к какому-либо сайту или порту, чтобы проверить, было ли соединение успешным. Если соединение было успешным (я получил положительный ответ), он добавит прокси в список прокси, а затем получит и проверит следующий в списке.пока это не будет сделано.

Я знаю, как это сделать, но у меня возникла небольшая проблема.Моя проблема заключается в том, что этот процесс не должен зависеть от скорости соединения, потому что кто-то может установить тайм-аут 15000 (миллисекунд) для соединения, которое будет обработано, и установить 100 потоков, и тогда ни один из прокси-серверов не будет работать, потому что соединение слишком медленное.1007 *

Я слышал о методе pinging для проверки прокси, но я не знаю, как использовать его в Java.

Может кто-нибудь дать мне решение или хотя бы классы, которые я мог бы использовать.

1 Ответ

9 голосов
/ 14 ноября 2011

Хорошо, я нашел решение, и это легко.

Что я использовал, это InetAddress.isReachable() метод вместе с некоторыми HttpClient от Apache.Для проверки прокси я использовал blanksite.com, потому что все, что мне нужно, это проверить возможность подключения, а не скорость прокси.

Так вот код (включая ввод из файла, но это не графический интерфейс, 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();
    }
}
...