Você já precisou obter informações de uma site da web ?
Se você é um programador Visual Basic (ou C#) provavelmente se deparou ou vai deparar com essa tarefa, afinal hoje praticamente quase todas as informações são acessadas através de uma página web.
Este artigo procura apresentar alternativas viáveis de como você pode realizar esta tarefa usando a linguagem VB .NET
Para acompanhar os exemplos deste artigo você vai precisar usar o Visual Basic 2010 Express Edition.
Um pouco de teoria
A plataforma .NET fornece duas classes presentes no namespace System.NET que podemos usar para podermos interagir diretamente com servidores usando HTTP. São elas:
WebRequest - Realiza uma requisição para uma URI - Uniform Resource Identifier . É uma classe abstrata.
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.
Criando o projeto
Abra o Visual Basic 2010 Express Edition e crie um novo projeto (File-> New Project) do tipo Windows Forms Application com o nome ExtraindoDadosWeb;
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
A seguir vamos incluir uma classe no projeto via menu Project -> Add Class com o nome Web.vb e definir o seguinte código nesta classe:
1- Namespaces
Imports System.Net
Imports System.Text.RegularExpressions
Imports System.IO
Imports System.Data
2- Método RequestDadosWeb que retorna uma string contendo o código de uma URL definida:
A seguir vamos mostrar como usar este método para obter informações de uma página Web.
Inclua no formulário form1.vb, a partir da ToolBox, os controles TextBox(txtDados Multiline=True), Button (btnObterPagina), TextBox(txtUrl).
No evento Click do botão Obter Links inclua o código a seguir:
Executando o projeto e fornecendo a URL, após clicar no botão Obter Links e veja o resultado obtido.
Que tal obter imagens de páginas web ?
Vamos fazer isso primeiro alterando o leiaute do formulário form1.vb, incluindo dois controles Button(btnImage1 e btnImage2) e dois controles PictureBox.
___________________________________
amos agora incluir na classe Web.vb o método RequestImagemWeb que retorna uma imagem obtida do website conforme a seguir:
No evento Click de cada um dos botões - Obter Imagem - inclua o código abaixo:
O código acima recebe a imagem do website e a exibe em um controle PictureBox.
Executando o projeto e clicando em cada um dos botões de comando teremos:
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Se você é um programador Visual Basic (ou C#) provavelmente se deparou ou vai deparar com essa tarefa, afinal hoje praticamente quase todas as informações são acessadas através de uma página web.
Este artigo procura apresentar alternativas viáveis de como você pode realizar esta tarefa usando a linguagem VB .NET
Para acompanhar os exemplos deste artigo você vai precisar usar o Visual Basic 2010 Express Edition.
Um pouco de teoria
A plataforma .NET fornece duas classes presentes no namespace System.NET que podemos usar para podermos interagir diretamente com servidores usando HTTP. São elas:
WebRequest - Realiza uma requisição para uma URI - Uniform Resource Identifier . É uma classe abstrata.
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.
Criando o projeto
Abra o Visual Basic 2010 Express Edition e crie um novo projeto (File-> New Project) do tipo Windows Forms Application com o nome ExtraindoDadosWeb;
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
A seguir vamos incluir uma classe no projeto via menu Project -> Add Class com o nome Web.vb e definir o seguinte código nesta classe:
1- Namespaces
Imports System.Net
Imports System.Text.RegularExpressions
Imports System.IO
Imports System.Data
2- Método RequestDadosWeb que retorna uma string contendo o código de uma URL definida:
Código:
Public Function RequestDadosWeb(ByVal pstrURL As String) As String
Dim oWebRequest As WebRequest
Dim oWebResponse As WebResponse = Nothing
Dim strBuffer As String = ""
Dim objSR As StreamReader = Nothing
'conecta com o website
Try
oWebRequest = HttpWebRequest.Create(pstrURL)
oWebResponse = oWebRequest.GetResponse()
'Le a resposta do web site e armazena em uma stream
objSR = New StreamReader(oWebResponse.GetResponseStream)
strBuffer = objSR.ReadToEnd
Catch ex As Exception
Throw ex
Finally
objSR.Close()
oWebResponse.Close()
End Try
Return strBuffer
End Function
A seguir vamos mostrar como usar este método para obter informações de uma página Web.
Inclua no formulário form1.vb, a partir da ToolBox, os controles TextBox(txtDados Multiline=True), Button (btnObterPagina), TextBox(txtUrl).
No evento Click do botão Obter Links inclua o código a seguir:
Código:
Private Sub btnLinks_Click(sender As System.Object, e As System.EventArgs) Handles btnLinks.Click
Dim wc As New Web
dgvDados.DataSource = wc.ExtrairLinks(txtLinks.Text.Trim)
End Sub
Executando o projeto e fornecendo a URL, após clicar no botão Obter Links e veja o resultado obtido.
Que tal obter imagens de páginas web ?
Vamos fazer isso primeiro alterando o leiaute do formulário form1.vb, incluindo dois controles Button(btnImage1 e btnImage2) e dois controles PictureBox.
___________________________________
amos agora incluir na classe Web.vb o método RequestImagemWeb que retorna uma imagem obtida do website conforme a seguir:
Código:
Public Function RequestImagemWeb(ByVal pstrURL As String, ByVal imagem As String) As String
Dim oWebRequest As WebRequest
Dim oWebResponse As WebResponse
'conecta com o website
oWebRequest = HttpWebRequest.Create(pstrURL)
oWebResponse = oWebRequest.GetResponse()
'Le a resposta do website e armazena em uma stream
Dim objStream As Stream
objStream = oWebResponse.GetResponseStream
Dim inBuf(100000) As Byte
Dim bytesToRead As Integer = CInt(inBuf.Length)
Dim bytesRead As Integer = 0
While bytesToRead > 0
Dim n As Integer = objStream.Read(inBuf, bytesRead, bytesToRead)
If n = 0 Then
Exit While
End If
bytesRead += n
bytesToRead -= n
End While
Dim fstr As New FileStream(imagem, FileMode.OpenOrCreate, FileAccess.Write)
fstr.Write(inBuf, 0, bytesRead)
objStream.Close()
fstr.Close()
oWebResponse.Close()
'retorna a imagem
Return imagem
End Function
No evento Click de cada um dos botões - Obter Imagem - inclua o código abaixo:
Código:
Private Sub btnImagem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImagem1.Click
Dim strArquivo As String
Dim wc As New Web
strArquivo = wc.RequestImagemWeb("http://www.exemplo.com/images/maco1b.gif", "maco1b.gif")
PictureBox1.Image = Image.FromFile(strArquivo)
End Sub
Private Sub btnImagem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImagem2.Click
Dim strArquivo As String
Dim wc As New Web
strArquivo = wc.RequestImagemWeb("http://www.exemplo.com/images/dvdnet2.gif", "dvdnet2.gif")
PictureBox2.Image = Image.FromFile(strArquivo)
End Sub
O código acima recebe a imagem do website e a exibe em um controle PictureBox.
Executando o projeto e clicando em cada um dos botões de comando teremos:
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Creditos:
macoratti - Pelo Tutorial
Fox - Por corrigir alguns bugs.
macoratti - Pelo Tutorial
Fox - Por corrigir alguns bugs.