Blog Maurício Luís -

Tecnologia e programação web - Consultoria em análise e desenvolvimento de sistemas. Action Script, VB.NET, C#, ASP, PHP, MySQL, SQL Server. Magento, Drupal, Joomla, Wordpress e etc.

11 mai, 2010

Baixando conteúdo de uma determinada URL

Categoria: .NET

Como baixar o conteúdo de uma determinada página HTML em uma determinada URL e manipulá-lo?

O código abaixo faz o download através de um stream do conteúdo de uma determinada URL e obtém o código fonte do arquivo especificado renderizado em HTML.

Baixando arquivos da internet de forma automática:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Configuration;

namespace Downloads
{
    internal class URL
    {
        /// 
        /// Obtem o conteudo de um arquivo na web
        /// 
        /// Url a ser processada
        /// Conteúdo do arquivo
        public string ObterConteudo(string u)
        {
            byte[] buffer;
            Stream st;
            StringBuilder sb;

            CarregaObjetos(u, out buffer, out st, out sb);

            int iTotalBuffer = 0;

            iTotalBuffer = ProcessaStreamReader(buffer, st, sb, iTotalBuffer);

            string result = sb.ToString();

            return result;
        }

        /// 
        /// Instancia os objetos
        /// 
        /// Url a ser processada
        /// Objeto de buffer
        /// Objeto de stream
        /// Objeto de stringbuilder
        private static void CarregaObjetos(string u, out byte[] buffer, out Stream st, out StringBuilder sb)
        {
            WebRequest wr = WebRequest.Create(u);
            WebResponse wrp = wr.GetResponse();
            buffer = new byte[128];
            st = wrp.GetResponseStream();
            sb = new StringBuilder();
        }

        /// 
        /// Processa o stream reader
        /// 
        /// Objeto de buffer
        /// Objeto de stream
        /// Objeto de stringbuilder
        /// Contador de processos do buffer
        /// Quantidade de processos do buffer
        private static int ProcessaStreamReader(byte[] buffer, Stream st, StringBuilder sb, int iTotalBuffer)
        {
            iTotalBuffer = st.Read(buffer, 0, 128);

            while ((iTotalBuffer != 0))
            {
                sb.Append(Encoding.ASCII.GetString(buffer, 0, iTotalBuffer));
                iTotalBuffer = st.Read(buffer, 0, 128);
            }

            return iTotalBuffer;
        }
    }
}

Fazendo a chamada do método e obtendo o conteúdo em uma string em um console application:

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Net;

namespace Downloads
{
    class Program
    {
        static void Main(string[] args)
        {
            var downloads = new Downloads(); // instancia a classe
            string url = "http://www.mauricio-luis.com/blog"; // url a ser baixada
            string conteudoObtido = downloads.ObterConteudo(url); // obtém o conteúdo HTML em uma string
        }
    }
}

5 comentários em "Baixando conteúdo de uma determinada URL"

Comentar aqui: