Verificando se um arquivo remoto existe (HttpWebRequest e HttpWebClient)
Neste artigo veremos verificar a existência de um arquivo remoto em uma aplicação VB .NET Windows Forms usando as classes HttpWebRequest e HttpWebClient. |
Um pouco de teoria
A plataforma .NET fornece classes presentes no namespace System.Net que podemos usar para podermos interagir diretamente com servidores usando HTTP. São elas:
WebRequest e WebResponse
Para podermos usar os recursos da classe WebRequest podemos usar as classes HttpWebRequest e HttpWebResponse que fornecem implementações específicas destas classes.
Dessa forma a classe HttpWebRequest fornece suporte para as propriedades e métodos definidos na classe WebRequest e para propriedades e métodos adicionais que permitem interagir usando o protocolo HTTP.
- O método
Create() de uma instância da classe WebRequest para iniciar os objetos
HttpWebRequest;
- O método GetResponse() realiza uma requisição síncrona através da
propriedade RequestUri, retornando um objeto HttpWebResponse contendo a
resposta de uma requisição;
- O método GetRequestStream() obtém um objeto stream usado para escrever
os dados da requisição;
Usando estas duas classes, temos tudo que precisamos para fazer o download de uma página Web completa em um stream ou postar dados para uma URL.
WebClient
A classe WebClient do namespace System.Net pode ser usada em uma aplicação VB para efetuar download e upload de arquivos na internet.
Ela é uma alternativa a classe WebRequest que usamos para mostrar como fazer download via HTTP no artigo: VB.NET - Fazendo o download de páginas via HTTP
A classe WebClient fornece métodos para enviar dados ou receber dados de qualquer recurso identificado pela URI ; seja local , intranet ou internet.
Ela , na verdade , usa a classe WebRequest para fornecer acesso aos recursos da internet. Instâncias da classe WebClient podem acessar dados com qualquer WebRequest registrados com o método WebRequest.RegisterPrefix.
A plataforma .NET Framework suporta por padrão URIs que começam com : http , https e file:schema
A classe WebClient fornece quatro métodos para fazer o envio de arquivos para um recurso:
A classe WebClient fornece três métodos para fazer o download de arquivos a partir de um recurso:
Neste artigo eu vou mostrar como verificar se um arquivo remoto existe usando as duas classes : HttpWebClient e HttpWebRequest.
Recursos usados:
Criando o projeto Windows Forms
Abra o VS 2013 Express for desktop clique em New Project;
Selecione Visual VB .NET ->Windows Forms Application, informe o nome Verifica_Existencia_Arquivo_Remoto e clique no botão OK;
A seguir vamos incluir no formulário form1.vb a partir da ToolBox os seguintes controles:
1 Label = Text= Informe a URL da localização do arquivo
1 TextBox - name = txtURL
1 Button - name = btnVerificaArquivoRemoto
1 CheckBox - name = chkWebClient
Disponha os controles no formulário conforme o leiaute da figura a seguir:
Agora vamos criar declarar no início do formulário os namespaces usados no projeto:
imports
System.IOimports
System.NetAgora no evento Click do botão de comando - Verificar se o arquivo Existe - inclua o seguinte código:
Private Sub btnVerificaArquivoRemoto_Click(sender As Object, e As EventArgs) Handles btnVerificaArquivoRemoto.Click
If chkWebClient.Checked Then
If ExisteArquivoRemotoWebCLient(txtURL.Text) Then
MessageBox.Show(" O arquivo indicado na URL Existe... (via WebClient) ")
Else
MessageBox.Show(" Não Existe o arquivo indicado na URL... (via WebClient) ")
End If
Else
If ExisteArquivoRemotoHttpWebRequest(txtURL.Text) Then
MessageBox.Show(" O arquivo indicado na URL Existe... ")
Else
MessageBox.Show(" Não Existe o arquivo indicado na URL...")
End If
End If
End Sub
|
private void btnVerificaArquivoRemoto_Click(object sender, EventArgs e)
{
if (chkWebClient.Checked) {
if (ExisteArquivoRemotoWebCLient(txtURL.Text)) {
MessageBox.Show(" O arquivo indicado na URL Existe... (via WebClient) ");
} else {
MessageBox.Show(" Não Existe o arquivo indicado na URL... (via WebClient) ");
}
} else {
if (ExisteArquivoRemotoHttpWebRequest(txtURL.Text)) {
MessageBox.Show(" O arquivo indicado na URL Existe... ");
} else {
MessageBox.Show(" Não Existe o arquivo indicado na URL...");
}
}
}
|
O código acima é bem simples e verifica se o checkbox chkWebclient esta marcado, chamando neste caso o método ExisteArquivoRemotoWebClient, caso contrário o método ExisteArquivoRemotoHttpWebRequest será usado.
Estes métodos recebem a URL informada e verificam se o arquivo existe retornando True em caso positivo e False caso o arquivo não exista.
O código dos métodos usados é visto a seguir:
Private Function ExisteArquivoRemotoHttpWebRequest(url As String) As Boolean
Try
'Cria um HttpWebRequest
Dim request As HttpWebRequest = TryCast(WebRequest.Create(url), HttpWebRequest)
'Define o metodo Request HEAD, podemos usar GEt tambem
request.Method = "HEAD"
'Obtendo a resposta com HttpWebResponse.
Dim response As HttpWebResponse = TryCast(request.GetResponse(), HttpWebResponse)
'Retorna True se o status for igula 200
Return (response.StatusCode = HttpStatusCode.OK)
Catch
'qualquer exceção irá retornar false
Return False
End Try
End Function
Private Function ExisteArquivoRemotoWebCLient(url As String) As Boolean
Dim resultado As Boolean = False
Using clienteWeb As New WebClient()
Try
Dim stream As Stream = clienteWeb.OpenRead(url)
If stream IsNot Nothing Then
resultado = True
Else
resultado = False
End If
Catch
'qualquer exceção irá retornar false
resultado = False
End Try
End Using
Return resultado
End Function
|
private bool ExisteArquivoRemotoHttpWebRequest(string url)
{
try {
//Cria um HttpWebRequest
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
//Define o metodo Request HEAD, podemos usar GEt tambem
request.Method = "HEAD";
//Obtendo a resposta com HttpWebResponse.
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//Retorna True se o status for igula 200
return (response.StatusCode == HttpStatusCode.OK);
} catch {
//qualquer exceção irá retornar false
return false;
}
}
private bool ExisteArquivoRemotoWebCLient(string url)
{
bool resultado = false;
using (WebClient clienteWeb = new WebClient()) {
try {
Stream stream = clienteWeb.OpenRead(url);
if (stream != null) {
resultado = true;
} else {
resultado = false;
}
} catch {
//qualquer exceção irá retornar false
resultado = false;
}
}
return resultado;
}
|
Como internamente a classe WebClient usa as classes HttpWebRequest e HttpWebResponse o primeiro método é melhor.
Executando o projeto e realizando um teste com um url, obtemos o seguinte resultado para um arquivo remoto existente :
Pegue o projeto completo aqui: Verifica_Existencia_Arquivo_Remoto.zip
De sorte que haja em vós o mesmo sentimento que houve também em Cristo Jesus,
Que, sendo em forma de Deus, não teve por usurpação ser igual a Deus,
Mas esvaziou-se a si mesmo, tomando a forma de servo, fazendo-se semelhante aos
homens;
E, achado na forma de homem, humilhou-se a si mesmo, sendo obediente até à
morte, e morte de cruz.
Filipenses 2:5-8
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 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
C# - Enviando arquivos para o servidor via FTP - Macoratti.net
Trocando dados entre sua aplicação Visual Basic e a Internet