Neste artigo vamos recordar como transferir dados via HTTP usando C#. |
A classe WebClient é uma abstração de alto nível construída no topo do HttpWebRequest para simplificar as tarefas mais simples envolvidas nas requisições HTTP.
Ela fornece métodos para enviar dados ou receber dados de qualquer recurso identificado pela URI; seja local , intranet ou internet. Assim temos:
Método para fazer o envio de arquivos para um recurso:
Métodos para fazer o download de arquivos a partir de um recurso:
Usar WebClient é um pouco mais lento que HttpWebRequest, mas essa desvantagem traz alguns benefícios como precisar de menos código e ser mais fácil de usar.
Neste artigo
vamos usar os métodos
WebClient.UploadDataTaskAsync
e WebClient.DownloadDataTaskAsync para realizar
essas tarefas em uma aplicação console.
recursos usados:
Criando o projeto Console
Crie um projeto do tipo Console App(.NET Framework) com o nome TransfDataHttp.
Vamos iniciar fazendo o download dos dados de uma página web. A título de exemplo vou acessar o endereço especificado pela URL : http://www.macoratti.net/Default.aspx
Agora inclua o código abaixo no arquivo Program.cs :
using System;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace TransfDataHttp
{
class Program
{
static async Task Main(string[] args)
{
string url = "http://www.macoratti.net/Default.aspx";
await DownloadAsync(url);
Console.ReadLine();
}
static async Task DownloadAsync(string url)
{
Uri uri = new Uri(url);
// cria uma instância de webclient
using (WebClient cliente = new WebClient())
{
// OBTEM O CONTEÚDO DO ARQUIVO
Console.WriteLine($"Downloading {uri.AbsoluteUri}");
// faz o download da pagina e armazena em um array de bytes
byte[] bytes;
try
{
// Existe também o método DownloadDataAsync
bytes = await cliente.DownloadDataTaskAsync(uri);
}
catch (WebException we)
{
Console.WriteLine(we.ToString());
return;
}
// Escreve a saida HTML
string page = Encoding.UTF8.GetString(bytes);
Console.WriteLine(page);
}
}
}
}
|
Estou usando a versão 7.2 da linguagem C# (para poder usar o Task em Main) e definindo o método DownloadAsync(string url) que recebe a url especificada e usa o método DownloadDataTaskAsync(uri) para fazer o download dos dados da página.
Nota: Para definir a versão da linguagem acessa a janela de propriedades do projeto e clique em Build, depois em Advanced e a seguir selecionie a versão conforme mostra a figura a seguir:
Podemos também baixar dados de um arquivo usando o método DownloadFileTaskAsync().
Executando este código teremos o resultado abaixo:
Vejamos agora como fazer o upload de dados usando o método UploadFileTaskAsync para enviar um arquivo para um servidor.
Vamos incluir um novo projeto chamado UploadData na solução criada anteriormente.
Este método carrega o arquivo local especificado para um recurso como uma operação assíncrona usando um objeto Task. Esse método não bloqueia o thread de chamada.
A sintaxe é : UploadFileTaskAsync(Uri, String, String)
onde:
Vamos enviar o arquivo teste_pdf.pdf que esta na pasta c:\dados para a url : http://www.macoratti.net
Assim vamos definir o método assim: UploadFileTaskAsync(uri, "c:\\dados\\Teste_pdf.pdf");
Agora inclua o código abaixo no arquivo Program.cs
using System;
using System.Net;
using System.Threading.Tasks;
namespace UploadData
{
class Program
{
static async Task Main(string[] args)
{
string url = "http://www.macoratti.net/Default.aspx";
await UploadDataAsync(url);
Console.ReadLine();
}
static async Task UploadDataAsync(string url)
{
Uri uri = new Uri(url);
// cria uma instância de webclient
using (WebClient cliente = new WebClient())
{
Console.WriteLine($"Enviando para {uri.AbsoluteUri}");
try
{
// Existem também o método UploadFileAsync
await cliente.UploadFileTaskAsync(uri, "c:\\dados\\Teste_pdf.pdf");
Console.WriteLine($"Dados enviados com sucesso to {uri.AbsoluteUri}");
}
catch (WebException we)
{
Console.WriteLine(we.ToString());
}
}
}
}
}
|
Agora criamos o método UploadDataAsync(string url) e invocamos o método UploadFileTaskAsync() passando a url e o nome do arquivo a ser transferido via POST.
Abaixo vemos o resultado da execução do código:
Segue o projeto completo aqui : TransfDataHttp.zip
"Meus
filhinhos, estas coisas vos escrevo, para que não pequeis; e, se alguém
pecar, temos um Advogado para com o Pai, Jesus Cristo, o justo."
1 João 2:1
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - Novidades da versão 7.0 - Macoratti
C# - O tipo Dynamic - Macoratti.net
NET HttpWebRequest x WebClient x HttpClient - Macoratti
C# - Fazendo requisições na web - Macoratti.net
VB .NET - Download de arquivos com WebClient - Macoratti
Download de arquivos na web - Macoratti.net