.NET代理支持 - HTTPWebRequest

时间:2010-01-09 09:59:53

标签: c# .net proxy httpwebrequest

好的我再次需要帮助!由于某种原因它不起作用,不知道为什么......甚至没有出现在我的捕获请求中..

public void load(object sender, DoWorkEventArgs e)
    {
        int repeat = 1;
        int proxyIndex = 1;
        if (listBox1.Items.Count == proxyIndex) //If we're at the end of the proxy list
        {
            proxyIndex = 0; //Make the selected item the first item in the list
        }
        try
        {
            int i = 0;
            while (i < listBox1.Items.Count)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(textBox1.Text);
                string proxy = listBox1.Items[1].ToString();
                string[] proxyArray = proxy.Split(':');
                WebProxy proxyz = new WebProxy(proxyArray[0], int.Parse(proxyArray[1]));
                request.Proxy = proxyz;
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        string str = reader.ReadToEnd();
                    }
                }

                    /*HttpWebRequest request = (HttpWebRequest)WebRequest.Create(textBox1.Text);
                    string proxy = listBox1.Items[i].ToString();
                    string[] proxyArray = proxy.Split(':');
                    WebProxy proxyz = new WebProxy(proxyArray[0], int.Parse(proxyArray[1]));
                    request.Proxy = proxyz;
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream());
                    string str = reader.ReadToEnd();
                    Thread.Sleep(100);
                    {
                        if (str != null)
                        {
                            listBox2.Items.Add("Starting connection.");
                            Thread.Sleep(1000);
                            {
                                listBox2.Items.Add("Waiting..");
                                Thread.Sleep(500);
                                {
                                    listBox2.Items.Add("Connection closed.");
                                    repeat++;
                                    continue;
                                }
                            }
                        }
                        else if (str == null)
                        {
                            listBox2.Items.Add("Reply was null, moving on.");
                            proxyIndex++;
                            repeat++;
                        }
                    }
                     */
                }
            }
        catch (Exception ex) //Incase some exception happens
        {
            MessageBox.Show(ex.Message);
            return;
            // listBox2.Items.Add("Error:" + ex.Message);
        }
    }

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:2)

看起来您正在尝试使用BackgroundWorker来执行此操作,并且在没有关于什么不起作用的任何更详细信息的情况下,我猜这是因为您没有分配任何结果或错误可以通过主线程获取。

如果成功,您应该分配请求的结果:

using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    e.Result = reader.ReadToEnd();
}

由于您似乎发出了多个请求,因此您应该将结果设为List<string>或类似。

您应该删除try / catch块并处理BackgroundWorker的RunWorkerCompleted事件中的任何错误:

private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if(e.Error != null)
    {
        MessageBox.Show("Error in async operation: " + ex.Message);
    }
    else
    {
        //process results
    }
}