HttpWebrequest порядок вызовов или необработанное исключение - PullRequest
0 голосов
/ 14 ноября 2011

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

Я создал метод загрузки, который различает типы сайтов:

    void startReq(string url, int type)
    {
        switch (type)
        {
            case 1: 
                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
                webRequest.BeginGetResponse(new AsyncCallback(GetRequestStreamCallbackPageTypeOne), webRequest);
                break;
            case 2:
                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
                webReques.BeginGetResponse(new AsyncCallback(GetRequestStreamCallbackPageTypeTwo), webReques);
                break;
            default:
                MessageBox.Show("should not get here: startreq-Method ,default-case");
                break;
        }

    }

А вот и ответный звонок:

    void GetRequestStreamCallbackPageTypeOne(IAsyncResult asynchronousResult)
    {
        string responseString = "";            
        WebResponse response = ((HttpWebRequest)asynchronousResult.AsyncState).EndGetResponse(asynchronousResult);
        using (StreamReader reader = new StreamReader(response.GetResponseStream()))
        {
            responseString = reader.ReadToEnd();
            reader.Close();
        }
        Dispatcher.BeginInvoke(()=>parseFirstpage(responseString));
    }

Как видите, я использую Dispatcher для вызова метода синтаксического анализа (я не знаю, как еще это сделать).

Как только я закончу анализ, я вызываю startReq с параметрами типа страницы 2. Но в GetRequestStreamCallbackPageTypeTwo метод, который * выглядит так же, как GetRequestStreamCallbackPageTypeOne Я получаю необработанную ошибку исключения в этой строке:

  WebResponse response = ((HttpWebRequest)asynchronousResult.AsyncState).EndGetResponse(asynchronousResult); 

и я не понимаю почему. Как я могу исправить это, или есть лучшее решение, чем мое?

1 Ответ

1 голос
/ 14 ноября 2011

URL, который я получаю во втором запросе, когда я запускаю ваш проект :

http://fahrplan.avv.de/master.php?&script=inquiry/service&apikey=avvtext&script=inquiry%2Fservice&apikey=avvtext&path=%2Fhome%2FconnectionInterstations&dep_city=aachen&dep_station=uniklinik&arr_city=j%C3%BClich+&arr_station=bf&time_deparr=dep&time_h=16&time_m=10&date_d=15&date_m=12&date_y=2011&AVV_DEP=a%3A2%3A%7Bs%3A32%3A%5C%5C%5C%5C%5C%5C%5C%22bc7f0461a0b4a09f77522616469ddf40%5C%5C%5C%5C%5C%5C%5C%22%3Ba%3A3%3A%7Bs%3A4%3A%5C%5C%5C%5C%5C%5C%5C%22data%5C%5C%5C%5C%5C%5C%5C%22%3Ba%3A5%3A%7Bs%3A4%3A%5C%5C%5C%5C%5C%5C%5C%22city%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A6%3A%5C%5C%5C%5C%5C%5C%5C%22aachen%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A7%3A%5C%5C%5C%5C%5C%5C%5C%22station%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A9%3A%5C%5C%5C%5C%5C%5C%5C%22uniklinik%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A8%3A%5C%5C%5C%5C%5C%5C%5C%22city_gkz%5C%5C%5C%5C%5C%5C%5C%22%3BN%3Bs%3A12%3A%5C%5C%5C%5C%5C%5C%5C%22station_type%5C%5C%5C%5C%5C%5C%5C%22%3BN%3Bs%3A10%3A%5C%5C%5C%5C%5C%5C%5C%22station_id%5C%5C%5C%5C%5C%5C%5C%22%3BN%3B%7Ds%3A4%3A%5C%5C%5C%5C%5C%5C%5C%22last%5C%5C%5C%5C%5C%5C%5C%22%3Bi%3A1321202548%3Bs%3A5%3A%5C%5C%5C%5C%5C%5C%5C%22count%5C%5C%5C%5C%5C%5C%5C%22%3Bi%3A1%3B%7Ds%3A32%3A%5C%5C%5C%5C%5C%5C%5C%22054a833caca0b0b81c1845f8d2a6001f%5C%5C%5C%5C%5C%5C%5C%22%3Ba%3A3%3A%7Bs%3A4%3A%5C%5C%5C%5C%5C%5C%5C%22data%5C%5C%5C%5C%5C%5C%5C%22%3Ba%3A5%3A%7Bs%3A4%3A%5C%5C%5C%5C%5C%5C%5C%22city%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A8%3A%5C%5C%5C%5C%5C%5C%5C%22j%C3%BClich+%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A7%3A%5C%5C%5C%5C%5C%5C%5C%22station%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A2%3A%5C%5C%5C%5C%5C%5C%5C%22bf%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A8%3A%5C%5C%5C%5C%5C%5C%5C%22city_gkz%5C%5C%5C%5C%5C%5C%5C%22%3BN%3Bs%3A12%3A%5C%5C%5C%5C%5C%5C%5C%22station_type%5C%5C%5C%5C%5C%5C%5C%22%3BN%3Bs%3A10%3A%5C%5C%5C%5C%5C%5C%5C%22station_id%5C%5C%5C%5C%5C%5C%5C%22%3BN%3B%7Ds%3A4%3A%5C%5C%5C%5C%5C%5C%5C%22last%5C%5C%5C%5C%5C%5C%5C%22%3Bi%3A1321202548%3Bs%3A5%3A%5C%5C%5C%5C%5C%5C%5C%22count%5C%5C%5C%5C%5C%5C%5C%22%3Bi%3A1%3B%7D%7D&showtimeframe=60&dateday=13&datemonth=11.2011&time=16%3A10&opt_timeopt=true&opt_minchange=3&opt_lowfloor=0&opt_ondemand=0&opt_rail=0&opt_surcharge=no&walkspeed=78&opt_walkpref=0&opt_nearby=false&via_pause=20&connection=NDA4NjA7OzM7MjcwNDE0MTU4MTgxNTgwODA7LTR8MyBBfDMwfDMgQXw2MHwzIEF8OTB8MyBBfDEyMHw7OTkwODc5OTQzMzc2NDg2NDQ7LTV8UkIyMHwxMXxSRTl8Mjd8UkUxfDYwfFJCMjB8NzF8UkU5fDg3fDs5OTM0MzA4NDUyNDk1NzY5NjstMnxSQjIxYXw2MHxSQjIxYXwxMjB8OzswOzA7MDs1OzA7MzswOzA7&searchConfig=80509129de625db319a7af6ef7a714c6&currentConnections=0062892b87364b4f252966c30e1eac19&connection[0]=1

Это слишком долго для браузера, но я думаю, что кодировка может быть проблемой(после AVV_DEP).

Я запустил простой запрос на сайте и жестко запрограммировал URL-адрес в вашем проекте.Запрос был успешным.Внимательно посмотрите на URL-адрес, возвращаемый первым методом - обратите внимание на кодировку в URL-адресе.

URL-адрес, который работал, был следующим:

http://fahrplan.avv.de/master.php?script=inquiry%2Fservice&apikey=avv&path=%2Fhome%2Fconnection&dep_city=Aachen&dep_station=&dep_city_gkz=5334002%3A0&dep_station_type=&dep_station_id=&via_city=&via_station=&via_pause=5&via_city_gkz=&via_station_type=&via_station_id=&arr_city=D%C3%BCren+%28Rheinland%29&arr_station=&arr_city_gkz=5358008%3A0&arr_station_type=&arr_station_id=&time_deparr=dep&time=13%3A30&dateday=14&datemonth=11.2011&date=14.11.2011&showtimetype=tours&showtours=5&showtimeframe=60&opt_nearby=false&walkspeed=83&opt_lowfloor=0&opt_surcharge=no&opt_ondemand=0&delfi_search=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...