2011-11-13 25 views
0

Webページの内容を取得し、解析し、リンクされたページを取得して解析したいと考えています。HttpWebrequest呼び出し順序または未処理例外

私はサイトの種類を区別し、ダウンロード方法を作成しました:

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を使用してIどのようにそれを行うか分からない)。

構文解析が終了したら、ページタイプ2のパラメータでstartReqを呼び出します。 はしかし*GetRequestStreamCallbackPageTypeOneと同じように見えますGetRequestStreamCallbackPageTypeTwo方法、で私はこのラインで未処理の例外エラーが出ます:

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

と私は理由を理解していません。これを修正するにはどうすればよいですか、それとも私より優れたソリューションですか?

+5

:働い

URLは、このでした。 Webサーバーからのエラーにより、EndGetResponseを呼び出すときに例外が発生します。 – calum

+0

しかありません: "例外は処理されませんでした"、私が詳細を押すと、System.Exception {""}があります。データ{System.Collections.ListDictionaryInterval} InnerException {"指定されていないエラー"}メッセージ " – Pamp

+0

switchステートメントにブレークポイントを設定し、2番目の要求の作成に使用するURLを再確認します。あなたがURLを投稿すると、それが私のために働くかどうかわかります。また、宣言されていない 'webReques'変数( 't'がありません)を使用する投稿コードで、変数名を確認してください。 – calum

答えて

1

私はあなたのprojectを実行したときに、私は2番目のリクエストで取得しています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のエンコーディングに注意してください。例外情報を投稿してください

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