XML - Usando recursos de XMLHTTP com ASP e VB


Muito tem se falado de Ajax e Atlas neste últimos dias; mas muitos dos recursos que são usados e que se escondem atrás dessas siglas já existiam e eram usadas em páginas dinâmicas em conjunto com as linguagens de scripts e XML.

Você pode usar o objeto ServerXMLHTTP do Microsoft XML (MSXML) para executar uma requisição HTTP (POST,GET e PUT). Estes recursos estão disponíveis na biblioteca MSXML (presente no IE a partir da versão 5).

Se você não possuir estes recursos pode baixá-los na página XML Downloads.

Você já deve saber que muitas das transações internet necessitam de comunicação entre o cliente e o servidor sendo que o request e o response podem estar no formato XML. Neste contexto o ServerXMLHTTP é recomendado para aplicações do lado do servidor e XMLHTTP é recomendado para aplicações clientes. Assim, um computador cliente pode usar um objeto ServerXMLHTTP (MSXML2.ServerXMLHTTP) para enviar uma request HTTP arbitrário, receber o response e efetuar o tratamento usando o modelo do objeto do Documento XML.

Desta forma podemos verificar se uma URL esta ativa , se um arquivo existe no servidor; podemos também efetuar downloads e uploads e ler o conteúdo de páginas, dentre outras tarefas.

Antes de continuar quero alertá-lo de que você vai precisar ter os seguintes recursos:

Outro ponto importante e a configuração do proxy que você deve efetuar para evitar erros de acesso as páginas remotas. Você precisa verificar se possui o aplicativo ProxyCfg na pasta System32 da sua máquina.

Digite a partir da linha de comando o seguinte : ProxyCfg -d (veja o resultado na figura abaixo.)

Com isto você não estará usando qualquer proxy quando tentar efetuar a conexão servidor-servidor.

Se quiser obter mais detalhes sobre o assunto leia o artigo :  Need roxy Settings  

Os objeto request XMLHTTP/ServerXMLHTTP são uma poderosa fonte de recursos que permite realizar muitas tarefas em páginas dinâmicas e também no VB e VBA.

Embora o objeto seja chamado XML HTTP ele não esta limitado a ser usado somente com XML. Podemos dar um request ou enviar qualquer tipo de documento.

No Internet Explorer você pode criar o objeto usando as seguintes sintaxes:

Dependendo da versão da MSXML instalada na sua máquina.

O objeto ServerXMLHTTP fornece métodos e propriedades para acesso seguro HTTP entre diferentes servidores na web. Você pode usá-lo para trocar dados XML entre os servidores.

Enquanto o XMLHTTP é desenhado para aplicações do lado do cliente, o ServerXMLHTTP foi projetado para aplicações no servidor.Você pode usar o objeto para trocar dados entre sua máquina local e um máquina remota quer na forma de dados XML ou stream. Ele pode ser usado com ASP, VB, C++, etc.

Vejamos um exemplo onde iremos verificar se um determinado arquivo existe em um servidor.

Vou criar um arquivo html chamado macoratti.htm com o seguinte conteúdo:

<html>
<head>
<title>Pagina de resposta - XMLHTTP</title>
</head>
<body>
<p>www.macoratti.net</a></p>
<p>Quase tudo para Visual Basic</p>
</body>
</html>
 

A seguir vou enviar o arquivo para o meu servidor na URL : www.macoratti.net

Agora vou criar um arquivo ASP chamado checaURL.asp usando a linguagem de script VBScript

<%
resolveTimeout = 300
conectaTimeout = 300
sendTimeout = 300
receiveTimeout = 300

verificaURL = "http://www.macoratti.net/macoratti.htm"

Set oHttpRequest = CreateObject("MSXML2.ServerXMLHTTP")

with oHttpRequest
  .SetTimeouts resolveTimeout,conectaTimeout,sendTimeout,receiveTimeout
  .Open "GET" , verificaURL
  .Send

  Select case .Status
    case 200 'ok
       Response.write verificaURL & " é uma URL válida."
    case 404 'Pagina não localizada
       Response.Write verificaURL & " não foi encontrado."
    case Else
       Response.Write " Ocorreu um erro não previsto de HTTP : " & .Status
  End Select
End With

Set oHttpRequest = Nothing
%>

O script acima utiliza a livraria ServerXMLHTTP para verificar se o arquivo macoratti.htm existe no endereço www.macoratti.net. Como eu enviei o arquivo ao executar a página , veja abaixo, o resultado será positivo.

Eu coloquei o valor da URL fixa no código por questão de simplicidade mas você pode incrementar criando uma função com mais recursos.

Se você trocar o valor conforme abaixo
verificaURL = "http://www.macoratti.net/teste.htm"
 

Irá obter uma resposta indicando que o arquivo não foi encontrado.

Usando o ServerXMLHTTP  no Visual Basic

A mesma coisa pode ser feita no Visual Basic. Vamos criar um projeto bem simples que irá acessar URL www.macoratti.net e obter o conteúdo do arquivo macoratti.htm exibindo em uma caixa de texto.

Para isto crie um novo projeto do tipo StandardEXE e no formulário padrão inclua uma caixa de texto(Multiline) e um botão de comando segundo o layout a seguir:

Figura 1.0-O formulário exibindo o conteúdo do arquivo macoratti.htm

A seguir inclua uma referência no seu projeto a biblioteca Microsot XML.v6.0.

Agora no evento click do botão de comando inclua o seguinte código:

Private Sub Command1_Click()

Dim obj As MSXML2.ServerXMLHTTP
Set obj = New MSXML2.ServerXMLHTTP

obj.open "GET", "http://www.macoratti.net/macoratti.htm"
obj.send

'se ocorreu um erro HTTP
If obj.Status >= 400 And obj.Status <= 505 Then
      msgbox "Erro Ocorrido : " & obj.Status & " - " & obj.statusText
Else
     Text1.Text = obj.responseText
End If

End Sub
 

Após criar uma instância do objeto - New MSXML2.ServerXMLHTTP

Estamos enviando um comando GET para obter o conteúdo do arquivo macoratti.htm

Se ocorrer algum erro maior ou igual a 400 e menor ou igual a 505 (erros de cliente e servidor) estaremos exibindo o erro, caso contrário, o conteúdo do arquivo é exibido na caixa de texto.(ver figura 1.0)

Obs: Para visualizar os códigos de erro HTTP clique aqui :  HTTP erros

Se você quiser usar e abusar dos recursos do XML sugiro que leia os artigos da seção XML do site em : http://www.macoratti.net/indxuml.htm

Até o próximo artigo XML ...

Referência: http://msdn.microsoft.com/xml/default.aspx


José Carlos Macoratti