WEBSERVICE PARA CONSUTAR CEPS

PERCIFILHO 19/12/2013 16:42:58
#432336
Boa tarde, pessoal.
Peguei uma rotina na Net que consome WebService para pesquisar Ceps, digitando o cep desejado, ele me retorna os demais dados. Funciona, beleza.
Agora, gostaria de saber como faço para realizar uma pesquisa, por exemplo o usuário digita um endereço e me mostre numa grid todos os endereços e os ceps do nome que foli digitado. Alguém pode me ajudar?

A rotina que eu estou utilizando é a seguinte:

Citação:

Private Sub BtnConsultaCep_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConsultaCep.Click
Dim ds As New DataSet()
Dim xml As String = [Ô]http://cep.republicavirtual.com.br/web_cep.php?cep=@cep&formato=xml[Ô].Replace([Ô]@cep[Ô], TxtCep.Text)
ds.ReadXml(xml)
TxtTipo.Text = ds.Tables(0).Rows(0)([Ô]tipo_logradouro[Ô]).ToString()
txtEndereco.Text = ds.Tables(0).Rows(0)([Ô]logradouro[Ô]).ToString()
txtBairro.Text = ds.Tables(0).Rows(0)([Ô]bairro[Ô]).ToString()
txtCidade.Text = ds.Tables(0).Rows(0)([Ô]cidade[Ô]).ToString()
txtUF.Text = ds.Tables(0).Rows(0)([Ô]uf[Ô]).ToString()
If TxtTipo.Text = [Ô][Ô] And txtEndereco.Text = [Ô][Ô] And txtBairro.Text = [Ô][Ô] And txtCidade.Text = [Ô][Ô] And txtUF.Text = [Ô][Ô] Then
MessageBox.Show([Ô]CEP não encontrado[Ô], [Ô]Erro de consulta[Ô], MessageBoxButtons.OK, MessageBoxIcon.Warning)
Exit Sub
End If
End Sub




Até mais.
KERPLUNK 19/12/2013 16:52:17
#432337
Resposta escolhida
1 - Isto não é um webservice propriamente dito, mas sim uma consulta por URI. Apesar de achar a idéia ótima.
2 - O único parâmetro disponibilizado é mesmo o cep, com retorno do logradouro.
3 - Existe uma função melhor para isso aqui
4 - Existe também uma base de dados offline para isso aqui, é a mesma base que essa URI usa
PERCIFILHO 20/12/2013 08:22:51
#432349
Valeu, Kerplunk, como não sou entendido no assunto, poderia me explicar melhor o que significa uma consulta por URI?
E, no meu caso, que queria fazer uma consulta para listar por endereço, tem como eu fazer?

Até mais.
KERPLUNK 20/12/2013 09:40:10
#432355
URI, ou Uniform Resource Identifier, (em inglês). Imagine uma página web como se fosse um método de uma classe. Esse método possui parâmetros. Veja o exemplo do endereço desse tópico:
[txt-color=#007100]http://www.vbmania.com.br/pages/index.php[/txt-color]?[txt-color=#0000f0]varModulo=Forum&varMethod=abrir&varID=432336&varWorld=[/txt-color]

A parte em verde, é a URL da página em si, contendo:
http:// -> protocolo usado para acesso, no caso, HyperText Transfer Protocol
www -> indica que o domínio está na World Wide Web
vbmania.com.br -> domínio, contendo sufixo br, indicando que o server é no Brasil
/pages -> diretório no domínio
/index.php -> a página em si

Já a outra parte, o que vem depois do [Ô]?[Ô], são parâmetros conhecidos como [Ô]QueryString[Ô], eles são separados por [Ô]&[Ô] e a estrutura básica é [Ô]Parâmetro=Valor[Ô]
No nosso caso temos:
varMethod=abrir
varID=432336
varWorld=

Cada um desses parâmetros, tem uma funcionalidade, que o programador constrói, ou seja, podem ser qualquer coisa que o programador quiser.
Esse conjunto todo, se dá o nome de URI, ou como visto acima Uniform Resource Identifier, (em inglês) e em português Identificador Uniforme de Recursos.
Os parâmetros de uma página, são construídos pelo programador, do mesmo modo que os parâmetros de um método. Portanto se o único parâmetro disponibilizado na página é CEP, é o único parâmetro que você pode passar e uma consulta por logradouro não será possível. Se o programador da página dos CEP decidir implementar uma consulta por logradouro, aí sim você vai conseguir, senão, sem chance.

A importância de entendimento sobre URI, se torna muito mais evidente quando se está programando aplicações Web. Elas são extremamente úteis para facilitar a vida tanto do usuário quanto do programador. é através da URI que se efetua os famosos ataques de [Ô]URL Injection[Ô], onde o atacante muda os valores dos parâmetros, podendo até mesmo serem usados partículas de SQL. Muitos programadores web, não tomam os devidos cuidados ao construir páginas que têm dependência de parâmetros URI e simplesmente concatenam o parâmetro diretamente em uma query, sem utilizar parâmetros corretamente. Isso faz com que seja possível concatenar qualquer coisa, inclusive outra query. Imagine a situação:

www.blablabla.com.br/login.php?usuario=zezinho
Dentro do código, se busca o valor do parâmetro [Ô]usuario[Ô] e se concatena em uma query:

usuario = QueryString([Ô]usuario[Ô])
//valor de usuario = [Ô]zezinho[Ô]
sql = [Ô]select * from usuarios where login = [ô][Ô] & usuario & [Ô][ô][Ô]
ExecutarSQL(sql)


Certo, qual o problema disso? Muito grave. Se no lugar de [Ô]zezinho[Ô], for colocado o seguinte:
[ô]; delete from usuarios; drop table usuarios; select [ô]nada[ô] from dual where [ô][ô] = [ô]

Isso faria com que a variável interna [Ô]usuario[Ô] tivesse esse valor, concatenando uma query extremamente perigosa e a fazendo ser executada:

usuario = QueryString([Ô]usuario[Ô])
//valor de usuario = [Ô][ô]; delete from usuarios; drop table usuarios; select [ô]nada[ô] from dual where [ô][ô] = [ô][Ô]
sql = [Ô]select * from usuarios where login = [ô][Ô] & usuario & [Ô][ô][Ô]
//valor da sql = [Ô]select * from usuarios where login = [ô][ô]; delete from usuarios; drop table usuarios; select [ô]nada[ô] from dual where [ô][ô] = [ô][ô]
ExecutarSQL(sql)


PERCIFILHO 20/12/2013 09:59:53
#432359
Gostei da explicação, Kerplunk. Realmente você é o cara!

Vou estudar mais e tentar aprender mais (mas, só no ano que vem) rsrsrs.

Valeu, até mais.
KERPLUNK 20/12/2013 10:07:44
#432361
Citação:

:
Gostei da explicação, Kerplunk. Realmente você é o cara!

Vou estudar mais e tentar aprender mais (mas, só no ano que vem) rsrsrs.

Valeu, até mais.


Tranquilo! Quando precisar, estamos ae...
Tópico encerrado , respostas não são mais permitidas