2011-03-23 41 views
14

Bir URL'den veri istendiğinde 403 hatası alıyorum. Bu bekleniyor ve nasıl düzeltileceğini sormuyorum.
Bu URL'yi doğrudan tarayıcım içine yapıştırırken, neden izin reddedildiğini açıklayan temel bir bilgi dizesi alıyorum.
Bu temel hata iletisini C# kodumla okuman gerekiyor, ancak istek yapıldığında System.Net.WebException ("Uzak sunucu bir hata verdi: (403) Yasaklandı.") Hatası atılıyor ve cevap gövdesi bana ulaşılamıyor.C# - Yanıt gövdesi bir 403 hatasından alınılıyor

Sayfanın içeriğini, istisna olmaksızın almak mümkün mü? İlgili kod, beklediğiniz gibi oldukça fazla, ama burada yine de var.

Herhangi bir yardım için teşekkür ederiz. Teşekkürler.

+1

Bir 'using' açıklamada senin' response' sarmak gerekir. – SLaks

+0

"using" noktasını hiç anlamadım. Sadece kendi kapsamı içinde bir nesneyi ilan eder, değil mi? Benim yöntemim ve try/catch blokları bunu yine de yapar, değil mi? –

+0

'using', nesnenin GC'yi beklemek yerine hemen imha edilmesini sağlar (bir 'son' bloğu oluşturur). – SLaks

cevap

29

Sen WebException.Response mülk arıyorsanız: Bu Benim için çalıştı

catch(WebException ex) 
{ 
    var response = (HttpWebResponse)ex.Response; 
} 
+0

Çok basit! Mükemmel çalıştı. Teşekkür ederim. –

+0

Sadece eklemek için, cevabı aldıktan sonra akışı normal gibi alabilirsiniz: response.GetResponseStream() – Sal

2

..

HttpWebResponse httpResponse; 
      try 
      { 
       httpResponse = (HttpWebResponse)httpReq.GetResponse(); 
       using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
       { 
        result = streamReader.ReadToEnd(); 
       } 
      } 
      catch (WebException e) 
      { 
       Console.WriteLine("This program is expected to throw WebException on successful run." + 
            "\n\nException Message :" + e.Message); 
       if (e.Status == WebExceptionStatus.ProtocolError) 
       { 
        Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode); 
        Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription); 
        using (Stream data = e.Response.GetResponseStream()) 
        using (var reader = new StreamReader(data)) 
        { 
         string text = reader.ReadToEnd(); 
         Console.WriteLine(text); 
        } 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
      } 
İlgili konular