每个循环使用新的代理
Using new proxy each loop
我正在尝试让我的索引检查器通过代理工作,因为我们要向它添加反 DOS 过滤器。我已经设法让它工作了,但是正如您从代码中看到的那样,它使用一行(电子邮件和索引)并使用其上的所有代理,然后移至下一行并使用该行上的所有代理,等等。 (因为foreach循环里面的foreach循环)
但我希望它为每一行使用一条线 + 一条代理线,尽管我不确定如何去做......(换句话说,我想要的是它不循环并使用所有foreach 中的代理行(代理行中的字符串代理行)在进入下一行之前(foreach(行中的字符串行))。
现在:
email1&index1 proxy1
email1&index1 proxy2
email1&index1 proxy3
我想要完成的事情:
email1&index1 proxy1
email2&index2 proxy2
email3&index3 proxy3
抱歉,如果我不清楚,但如果是这样,请告诉我,我会尽力解释得更好。
System.IO.StreamReader file = new System.IO.StreamReader(@"input.txt");
List<string> lines = new List<string>(File.ReadAllLines(@"C:\input.txt"));
List<string> proxylines = new List<string>(File.ReadAllLines(@"C:\proxies.txt"));
foreach (string line in lines) //here i am reading my emails & indexes
{
string[] data = line.Split(':');
string email = data[0];
string index = data[1];
using (var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }))
{
foreach (string proxyline in proxylines) //here i am reading my proxies line by line
{
WebRequest request = WebRequest.Create("https://website.com");
string[] proxydata = proxyline.Split(':');
string proxy = proxydata[0];
int port = Int32.Parse(proxydata[1]);
request.Proxy = new WebProxy(proxy, port);
Console.WriteLine(proxy + ":" + port);
request.Method = "POST";
string postData = ("{\"email\":\"" + email + "\",\"index\":\"" + index+ "\"}");
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/json";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
dynamic json = JObject.Parse(responseFromServer);
if (json["index"] != null)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(email + ":" + index);
Console.ResetColor();
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(email + ":" + index);
Console.ResetColor();
}
reader.Close();
dataStream.Close();
response.Close();
}
}
}
Console.ReadKey();
那么,您知道解决这个问题的方法吗?
您可以使用 for 循环而不是 foreach 同时遍历两个列表:
string[] lines = File.ReadAllLines(@"C:\input.txt");
string[] proxylines = File.ReadAllLines(@"C:\proxies.txt");
for (int i = 0; i < Math.Min(lines.Length, proxylines.Length); i++)
{
string line = lines[i];
string proxy = proxylines[i];
// actions ...
}
-我用数组声明替换了List<>以提高性能(由于for循环,我们通过索引号访问列表项)
-Math.Min 用作证券,因为两个列表可以有不同的行数
我正在尝试让我的索引检查器通过代理工作,因为我们要向它添加反 DOS 过滤器。我已经设法让它工作了,但是正如您从代码中看到的那样,它使用一行(电子邮件和索引)并使用其上的所有代理,然后移至下一行并使用该行上的所有代理,等等。 (因为foreach循环里面的foreach循环)
但我希望它为每一行使用一条线 + 一条代理线,尽管我不确定如何去做......(换句话说,我想要的是它不循环并使用所有foreach 中的代理行(代理行中的字符串代理行)在进入下一行之前(foreach(行中的字符串行))。
现在:
email1&index1 proxy1
email1&index1 proxy2
email1&index1 proxy3
我想要完成的事情:
email1&index1 proxy1
email2&index2 proxy2
email3&index3 proxy3
抱歉,如果我不清楚,但如果是这样,请告诉我,我会尽力解释得更好。
System.IO.StreamReader file = new System.IO.StreamReader(@"input.txt");
List<string> lines = new List<string>(File.ReadAllLines(@"C:\input.txt"));
List<string> proxylines = new List<string>(File.ReadAllLines(@"C:\proxies.txt"));
foreach (string line in lines) //here i am reading my emails & indexes
{
string[] data = line.Split(':');
string email = data[0];
string index = data[1];
using (var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }))
{
foreach (string proxyline in proxylines) //here i am reading my proxies line by line
{
WebRequest request = WebRequest.Create("https://website.com");
string[] proxydata = proxyline.Split(':');
string proxy = proxydata[0];
int port = Int32.Parse(proxydata[1]);
request.Proxy = new WebProxy(proxy, port);
Console.WriteLine(proxy + ":" + port);
request.Method = "POST";
string postData = ("{\"email\":\"" + email + "\",\"index\":\"" + index+ "\"}");
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/json";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
dynamic json = JObject.Parse(responseFromServer);
if (json["index"] != null)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(email + ":" + index);
Console.ResetColor();
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(email + ":" + index);
Console.ResetColor();
}
reader.Close();
dataStream.Close();
response.Close();
}
}
}
Console.ReadKey();
那么,您知道解决这个问题的方法吗?
您可以使用 for 循环而不是 foreach 同时遍历两个列表:
string[] lines = File.ReadAllLines(@"C:\input.txt");
string[] proxylines = File.ReadAllLines(@"C:\proxies.txt");
for (int i = 0; i < Math.Min(lines.Length, proxylines.Length); i++)
{
string line = lines[i];
string proxy = proxylines[i];
// actions ...
}
-我用数组声明替换了List<>以提高性能(由于for循环,我们通过索引号访问列表项)
-Math.Min 用作证券,因为两个列表可以有不同的行数