Я использую программное обеспечение Vidalia Bridge с curl и PHP для очистки некоторых веб-сайтов. Есть этот веб-сайт, который каким-то образом дает мне сообщение «Не удается завершить соединение SOCKS5 с 0.0.0.0:0» каждый раз, когда у меня есть 11 или более одновременных запросов.
3 недели назад, когда я в последний раз проверял его, раньше было 31 или более запросов, пока я не получил сообщение об ошибке сверху, теперь это 11.
Редактировать:
Вот схема, поясняющая, что принадлежит мне (может контролировать), а что удаленно (не может контролировать), а также полные взаимосвязи между компонентами.
Мой вопрос:
Связано ли это с веб-сайтом (могут ли они контролировать количество запросов в секунду, учитывая, что я использую разные файлы cookie для каждого запроса), или это связано с настройками vidalia / curl.
Изменить: вот моя конфигурация:
Я использую Java с несколькими потоками, каждый поток имеет доступ к локальному PHP-скрипту, который выполняет роль очистки сайта, заданного в качестве параметра GET. Скрипт PHP использует CURL с 9050 в качестве порта для TOR (Vidalia Bridge) для очистки веб-сайтов .onion.
Редактировать 2: (Подробнее)
Я использую:
а) XAMPP для окон:
б) Vidalia Bridge Bundle:
Вот код в PHP: (curlSample.php)
<?php
$ch = curl_init();
/*
********************************
Comment or uncomment below
*/
$url="http://alphabaywyjrktqn.onion/";
//$url="http://nucleuspf3izq7o6.onion/";
/*
Comment or uncomment above
********************************
*/
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Set Vidalia Bridge (Tor proxy socks connection)
curl_setopt($ch, CURLOPT_PROXY, "http://127.0.0.1:9050");
curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
$output = curl_exec($ch);
$curl_error = curl_error($ch);
if(strlen($curl_error) > 0){
echo $curl_error;
exit();
}
echo $output;
Вот код на Java:
а) AlphaTestConnections.java
import java.util.ArrayList;
public class AlphaTestConnections {
public static void main(String[] args){
int start=0;
int end=20;
ArrayList<Thread> threads = new ArrayList<Thread>();
for(int i=start; i<end; i++){
threads.add(new Thread(new AlphaTestConnectionsThread(i)));
}
for(int i=0; i<threads.size(); i++){
threads.get(i).start();
}
for(int i=0; i<threads.size(); i++){
try {
threads.get(i).join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("done");
}
}
б) AlphaTestConnectionsThread.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class AlphaTestConnectionsThread implements Runnable{
private final static String USER_AGENT = "Mozilla/5.0";
private static String request() {
try{
URL obj = new URL("http://localhost/curlSample.php");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// optional default is GET
con.setRequestMethod("GET");
//add request header
con.setRequestProperty("User-Agent", USER_AGENT);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Return first 50 characters from source code (enough to test this)
return response.toString().substring(0, 50);
}catch(Exception e){
System.out.println("Exception");
e.printStackTrace();
}
return null;
}
private int i;
public AlphaTestConnectionsThread(int i){
this.i=i;
}
@Override
public void run() {
System.out.println("Thread #" + i + ": " + request());
}
}
Чтобы протестировать код, вам сначала нужно запустить Apache в Xampp, а затем запустить пакет Vidalia Bridge,
создайте файл curlSample.php в корневом каталоге Xampp, затем запустите AlphaTestConnections.java.
Вы увидите, что для 20 соединений 10 вернет исходный код, а 10 выдаст ошибку «Не удается завершить соединение SOCKS5 с 0.0.0.0:0».
Теперь отредактируйте curlSample.php и прокомментируйте / раскомментируйте код, чтобы использовать второй URL. Теперь он вернет исходный код для всех 20 соединений, без каких-либо ошибок.
Я хотел бы знать, как это возможно, почему существует ограничение в 10 одновременных подключений для определенного веб-сайта и как я могу его удалить?
Задача ещё не решена.
Других решений пока нет …