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

  1. WebRequest - Realiza uma requisição para uma URI - Uniform Resource Identifier . É uma classe abstrata.
  2. WebResponse - Fornece uma resposta a partir de uma URI - Uniform Resource Identifier . É uma classe abstrata.

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:

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.IO

imports System.Net

Agora 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:


José Carlos Macoratti