Поддержка .NET Proxy - HTTPWebRequest - PullRequest
0 голосов
/ 09 января 2010

Хорошо, мне снова нужна помощь! По какой-то причине это не работает, не знаю почему .. в моем запросе на улов даже ничего не появляется

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 Ответ

2 голосов
/ 09 января 2010

Похоже, вы пытаетесь использовать BackgroundWorker для выполнения этой операции, и в отсутствие какой-либо более подробной информации о том, что не работает, я предполагаю, что это потому, что вы не назначаете какой-либо результат или ошибки который может быть подхвачен главным потоком.

В случае успеха вам следует присвоить результаты запроса:

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

Поскольку вы, похоже, делаете несколько запросов, вам, вероятно, следует сделать результат List<string> или аналогичным.

Вы должны удалить блок try / catch и устранить любые ошибки в событии RunWorkerCompleted BackgroundWorker:

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