web-dev-qa-db-fra.com

Convertir en flux à partir d'une URL

J'essayais de convertir une URL en Stream mais je ne sais pas si j'ai raison ou tort.

protected Stream GetStream(String gazouUrl)
{
    Stream rtn = null;
    HttpWebRequest aRequest = (HttpWebRequest)WebRequest.Create(gazouUrl);
    HttpWebResponse aResponse = (HttpWebResponse)aRequest.GetResponse();

    using (StreamReader sReader = new StreamReader(aResponse.GetResponseStream(), System.Text.Encoding.Default))
    {
        rtn = sReader.BaseStream;
    }
    return rtn;
}

Suis-je sur la bonne voie?

21
Hoque

Vous n'avez pas besoin de créer un StreamReader ici. Juste return aResponse.GetResponseStream();. L'appelant de cette méthode devra également appeler Dispose sur le flux à la fin de l'opération.

15
Quartermeister

J'ai fini par faire une version plus petite et utiliser WebClient à la place de l'ancien code de requête HTTP:

private static Stream GetStreamFromUrl(string url)
{
    byte[] imageData = null;

    using (var wc = new System.Net.WebClient())
        imageData = wc.DownloadData(url);

    return new MemoryStream(imageData);
}
27
balexandre

Voici mon approche, avec gestion des erreurs jusqu'à vous ;-)

    private MemoryStream GetStreamFromUrl(string url)
    {
        byte[] imageData = null;
        MemoryStream ms;

        ms = null;

        try
        {
            using (var wc = new System.Net.WebClient())
            {
                imageData = wc.DownloadData(url);
            }
            ms = new MemoryStream(imageData);
        }
        catch (Exception ex)
        {
            //forbidden, proxy issues, file not found (404) etc
        }

        return ms ;
    }