2017-09-15 1 views
1

Derzeit crawlen mehrere Website mit mehreren Threads (URL-Verbindung Ansatz) mit nur einer einzigen IP-Adresse und bekam Block von einigen Websites.Java verwenden mehrere IP für Web-Crawl mit Threads

Und wir wollen irgendwie dieses Problem verhindern. Was mich dazu bringt, an unsere virtuelle Maschine mit mehreren IP-Adressen zu denken.

Ich möchte fragen, gibt es eine Möglichkeit in Java, diese lokalen IPs in verschiedenen URL-Verbindungen zu verwenden, die unter verschiedenen Java-Threads laufen?

Ich habe versucht, mit Proxy, aber es scheint nicht funktioniert, weil ich glaube, dass die lokalen IPs nicht Proxy sein sollte. Hier

ist, was ich versucht: Proxy Proxy = new Proxy (Proxy.Type.HTTP, neue InetSocketAddress (InetAddress.getByAddress (ip), 8080));

Eine andere Lösung von Define source ip address using Apache HttpClient funktioniert nicht, da die Funktionen abgeschrieben werden.

Vielen schätzen Sie Ihr Wissen, wenn jemand das gleiche Szenario begegnet.

Antwort

1

eine Lösung gefunden RequestConfig neueste Httpclient verwenden, hier ist mein Code: für Menschen

String ipAddress = "xxx.xxx.xxx.xxx"; // your intend source IP 
byte ip[] = InetAddress.getByName(ipAddress).getAddress(); 
RequestConfig config = RequestConfig.custom() 
    .setLocalAddress(InetAddress.getByAddress(ip)) 
    .build(); 
HttpClient client = HttpClientBuilder.create().build(); 
HttpGet getResquest = new HttpGet(address); 
getResquest.setConfig(config); 
HttpResponse response = client.execute(getResquest); 

Nur für den Fall, die das gleiche Problem auftritt.

Eine Menge Antwort von stackoverflow verwendet den vorherigen HttpClient mit getParem-Methoden, die jetzt deplicated ist und jetzt RequestConfig für die Änderung verwenden sollte.

0

Sie werden nicht sehr weit kommen können. Die IP-Adressen müssen innerhalb Ihrer Domain gültig sein, andernfalls funktioniert das Routing zwischen Ihrem Computer und dem Webserver nicht.

Also der Verkehr wird identifizierbar als aus einer einzigen Domäne stammen. Und wenn Sie sich hinter einem IPv4-NAT befinden, scheint Ihr gesamter Datenverkehr trotzdem von einer einzigen IP-Adresse zu stammen und macht das, was Sie versuchen, rückgängig zu machen. Wenn Sie IPv6 verwenden, sieht es immer noch so aus, als würde der gesamte Datenverkehr vom selben Ort kommen. Es gibt nichts, was Sie tun können, damit der Verkehr scheinbar aus verschiedenen Domänen kommt und eine Verbindung herstellen kann. Die TCP-Pakete müssen erfolgreich routen, und das wird nicht passieren, wenn die Absenderadresse nicht in Ihrer Domäne ist.

Es ist nicht verwunderlich, dass einige Websites Ihre Anfragen blockiert haben - zu viele Verbindungsversuche von einem Ort aus betrachtet ein bisschen wie ein DOS-Angriff, eindeutig unfreundlich. Ihre beste Option ist es, den Eigentümer der Website zu kontaktieren und um Erlaubnis zu fragen. Angesichts der Tatsache, dass der Verkehr Geld kostet, wollen sie zu Recht wissen, was für sie drin ist.

Verwandte Themen