每个循环使用新的代理

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 用作证券,因为两个列表可以有不同的行数