1

I've been trying to use a proxy on my webBrowser1.Navigate request using the following stackoverflow answer: https://stackoverflow.com/a/9036593/7443548

But this code would crash my for loop which I'm running in my own code.

How could I use a proxy for each request inside my code function?

Function which needs to use a proxy:

private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    Uri currentUri = new Uri(bunifuMaterialTextbox1.Text);

    int views = bunifuSlider1.Value;

    for (int i = 0; i < views; i++)
    {
        webBrowser1.Navigate(currentUri);
        System.Threading.Thread.Sleep(3000);
        backgroundWorker.ReportProgress(i + 1);
    }
}

My full code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Windows.Forms;

namespace YoutubeViewBot
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            backgroundWorker = new BackgroundWorker();
            backgroundWorker.DoWork += backgroundWorker_DoWork;
            backgroundWorker.ProgressChanged += backgroundWorker_ProgressChanged;
            backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted;
            backgroundWorker.WorkerReportsProgress = true;
        }

        youtubeViewBot youtubeBot = new youtubeViewBot();
        List<string> proxyList = new List<string>();

        private void bunifuImageButton1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void bunifuImageButton2_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }

        private void bunifuSlider1_ValueChanged(object sender, EventArgs e)
        {
            bunifuCustomLabel5.Text = bunifuSlider1.Value + " Views will be added.";
        }

        private void bunifuFlatButton3_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                proxyList = youtubeBot.getProxyList(openFileDialog1.FileName);
                bunifuCustomLabel2.Text = proxyList.Count().ToString();
            }
        }

        private void bunifuFlatButton2_Click(object sender, EventArgs e)
        {
            if (!backgroundWorker.IsBusy)
            {
                backgroundWorker.RunWorkerAsync();
            }
            else
            {
                MessageBox.Show("There is already a process running.", "YoutubeViewbot response");
            }
        }

        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            Uri currentUri = new Uri(bunifuMaterialTextbox1.Text);

            int views = bunifuSlider1.Value;

            for (int i = 0; i < views; i++)
            {
                webBrowser1.Navigate(currentUri);
                System.Threading.Thread.Sleep(3000);
                backgroundWorker.ReportProgress(i + 1);
            }
        }

        private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            bunifuCustomLabel7.Text = e.ProgressPercentage.ToString();
            bunifuCustomLabel7.Update();
        }

        private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            bunifuCustomLabel9.Text = "Finished";
            MessageBox.Show("Finished", "YoutubeViewBot response");
        }

        private void bunifuFlatButton1_Click(object sender, EventArgs e)
        {

        }
    }
}

And here the code which I was trying to use:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Windows.Forms;

namespace YoutubeViewBot
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            backgroundWorker = new BackgroundWorker();
            backgroundWorker.DoWork += backgroundWorker_DoWork;
            backgroundWorker.ProgressChanged += backgroundWorker_ProgressChanged;
            backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted;
            backgroundWorker.WorkerReportsProgress = true;
        }

        youtubeViewBot youtubeBot = new youtubeViewBot();
        List<string> proxyList = new List<string>();
        Uri currentUri;

        private void bunifuImageButton1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void bunifuImageButton2_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }

        private void bunifuSlider1_ValueChanged(object sender, EventArgs e)
        {
            bunifuCustomLabel5.Text = bunifuSlider1.Value + " Views will be added.";
        }

        private void bunifuFlatButton3_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                proxyList = youtubeBot.getProxyList(openFileDialog1.FileName);
                bunifuCustomLabel2.Text = proxyList.Count().ToString();
            }
        }

        private void bunifuFlatButton2_Click(object sender, EventArgs e)
        {
            if (!backgroundWorker.IsBusy)
            {
                backgroundWorker.RunWorkerAsync();
            }
            else
            {
                MessageBox.Show("There is already a process running.", "YoutubeViewbot response");
            }
        }

        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            Uri currentUri = new Uri(bunifuMaterialTextbox1.Text);

            int views = bunifuSlider1.Value;

            for (int i = 0; i < views; i++)
            {
                Random rnd = new Random();
                int r = rnd.Next(proxyList.Count);
                string proxy = proxyList[r];

                currentUri = new Uri(bunifuMaterialTextbox1.Text);
                HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(currentUri);
                WebProxy myProxy = new WebProxy(proxy);
                myRequest.Proxy = myProxy;
                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

                webBrowser1.DocumentStream = myResponse.GetResponseStream();
                webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating);

                backgroundWorker.ReportProgress(i + 1);
            }
        }

        private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
        {
            if (e.Url.AbsolutePath != "blank")
            {
                currentUri = new Uri(currentUri, e.Url.AbsolutePath);
                HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(currentUri);

                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

                webBrowser1.DocumentStream = myResponse.GetResponseStream();
                e.Cancel = true;
            }
        }

        private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            bunifuCustomLabel7.Text = e.ProgressPercentage.ToString();
            bunifuCustomLabel7.Update();
        }

        private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            bunifuCustomLabel9.Text = "Finished";
            MessageBox.Show("Finished", "YoutubeViewBot response");
        }

        private void bunifuFlatButton1_Click(object sender, EventArgs e)
        {

        }
    }
}

Steps it should do:

  1. On click on the button: bunifuFlatButton2_Click it should start the backgroundWorker_DoWork functon
  2. backgroundWorker_DoWork should run the loop x times and for each run it should attach a new proxy to the request

I would appreciate any kind of help.


Edit 1:

While debugging step by step, I realized the for loop crashes after running the second time on the following line:

HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

Video can be seen here:

https://www.youtube.com/watch?v=H3y2jFvuK3M

It finished after running the for loop twice instead of 454 times.

Community
  • 1
  • 1
d45ndx
  • 89
  • 8

0 Answers0