代码之家  ›  专栏  ›  技术社区  ›  Rokasura

使用新代理每个循环

  •  1
  • Rokasura  · 技术社区  · 7 年前

    我正试图让我的索引检查器通过代理工作,因为我们即将向它添加一个反dos过滤器。我已经设法让它工作了,但正如您从代码中看到的,它使用一行(电子邮件和索引)并使用其上的所有代理,然后转到下一行并使用该行上的所有代理,依此类推。(因为foreach循环中的foreach循环)

    但我希望它每行使用一行+一个普鲁卡因,尽管我不知道如何进行。。。(换句话说,我希望它在进入下一行(foreach(string line In line))之前,不要循环并使用foreach中的所有proxyline(string proxyline In proxylines))。

    现在: 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();
    

    那么,你知道怎么做吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Oxald    7 年前

    可以使用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 ...
            }
    

    -我替换了列表(<&燃气轮机;通过数组声明提高性能(由于for循环,我们通过索引号访问列表项)

    -数学。Min用作安全性,因为两个列表可以有不同的行数