17 Eylül 2016 Cumartesi

HttpWebResponse Sınıfı

Giriş
HttpWebRequest sınıfını doğru doldurmak bana hep zor geldi. Ancak HttpWebResponse ile cevabı okumak çok kolay.

Constructor
HttpWebRequest sınıfı kullanılarak bu nesne yaratılır. HttpWebResponse her zaman using ile kullanılmalıdır, çünkü Http/1.1 aynı anda ikiden fazla bağlantıya izin vermiyor. Bu yüzden bağlantının kapatılması gerekiyor.
using(HttpWebResponse response = (HttpWebResponse)httpWebReq.GetResponse())
{...}
Cookies
Sunucunun gönderdiği cevaptaki cookie'lere şöyle erişiriz.
HttpWebResponse response = ...;
foreach (Cookie c in authresponse.Cookies)
    System.WriteLine ({0,1,2,3},c.Name, c.Value, c.Path, c.Domain));
GetResponseStream metodu
Cevabı stream olarak okumamızı sağlar.
var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();
XML olarak ta okuyabiliriz.
var xdoc = XDocument.Load(response.GetResponseStream());
Cevabı dosyaya şöyle kaydederiz.
string path = ...;
...
using (Stream inputStream = response.GetResponseStream())
using (Stream outputStream = File.OpenWrite(path))
{
  byte[] buffer = new byte[4096];
  int bytesRead;
  do
  {
    bytesRead = inputStream.Read(buffer, 0, buffer.Length);
    outputStream.Write(buffer, 0, bytesRead);
  } while (bytesRead != 0);
}
CharacterSet Alanı
Bu sınıfın CharacterSet isimli bir özelliği ile döndürülen metnin kullandığı kodek öğrenilebilir.
var charset= response.CharacterSet;
var encoding = Encoding.GetEncoding(charset);
var sr= new StreamReader(response.GetResponseStream(),encoding);
Headers Alanı
WebHeaderCollection tipindendir. Şöyle yaparız.
HttpWebResponse response = ...;
WebHeaderCollection headers = response.Headers;
StatusCode Alanı
Cevabı şöyle kontrol ederiz.
HttpWebResponse response =...

if ((response.StatusCode == HttpStatusCode.OK ||
     response.StatusCode == HttpStatusCode.Moved ||
     response.StatusCode == HttpStatusCode.Redirect) &&
     response.ContentType.StartsWith("image", StringComparison.OrdinalIgnoreCase))
{...}
StatusDescription Alanı
Şöyle yaparız.

Console.WriteLine(response.StatusDescription);

Hiç yorum yok:

Yorum Gönder