我正在使用带有curl和PHP的Vidalia Bridge软件来抓取一些网站。这个网站以某种方式设法给我"无法完成SOCKS5连接到0.0.0.0:0"每次我有11个或更多的并发请求。 3个星期前,当我上次测试它时,它曾经是31个或更多请求,直到我收到上面的错误消息,现在是11。
编辑: 这是一个图表,说明我的(可以控制)什么和远程(无法控制)以及组件之间的完整关系。
我的问题是: 这是与网站相关的事情(他们可以控制每秒的请求数量,考虑到我为每个请求使用不同的cookie文件),或者它是与vidalia / curl设置相关的东西。
编辑:这是我的配置: 我使用带有多个线程的Java,每个线程都在访问一个本地PHP脚本,该脚本具有抓取作为GET参数给出的网站的作用。 PHP脚本使用CURL和9050作为TOR(Vidalia Bridge)的端口,以便刮掉.onion网站。
编辑2 :(更多细节) 我正在使用: a)XAMPP for windows:
b)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中的代码: a)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");
}
}
b)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());
}
}
要测试代码,您首先需要在Xampp中启动Apache,然后启动Vidalia Bridge软件包,
在Xampp的根目录中创建curlSample.php文件,然后运行AlphaTestConnections.java。 您将看到,对于20个连接,10将返回源代码,10将给出错误&#34;无法完成SOCKS5连接到0.0.0.0:0"。 现在,编辑curlSample.php并注释/取消注释代码以使用第二个URL。它现在将返回所有20个连接的源代码,而不会给出任何错误。 我想知道这怎么可能,为什么特定网站有10个并发连接限制,我怎么能删除它?