BUSCAR PAGINA EM WINDOWS FORMS

JOAOBENEVIDES 30/11/2015 16:20:31
#454608
Ola Pessoal tenho este site
http://receitaws.com.br/v1/cnpj/[cnpj]

onde estou tentando buscar informação como faco para buscar informação neste site ?
KERPLUNK 30/11/2015 17:29:33
#454613
Resposta escolhida
Em primeiro lugar, não é uma página, é uma WebAPI. Os dados ali retornados são JSON. Então, faça o seguinte:
1 - Consulte um CNPJ qualquer, ele vai trazer os dados da empresa
2 - Copie o resultado
3 - Abra o Visual Studio e crie uma classe nova
4 - Clique no menu [Ô]Edit -> Paste Special -> Paste JSON as classes[Ô]
Nesse ponto ele vai criar as classes referentes ao retorno dessa WebAPI. Então vamos criar o HttpClient, que é o que vai consumir o serviço:
1 - Adicione as referências [Ô]System.Net.Http[Ô] e [Ô]System.Runtime.Serialization[Ô] no seu projeto, se ainda não adicionou
2 - Uma das classes coladas, é por padrão chamada Rootobject, renomeie-a para [Ô]Empresa[Ô]
3 - Crie um botão e uma textbox no form
4 - No botão coloque o código básico para consumir a WebAPI:

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync([Ô]http://receitaws.com.br/v1/cnpj/[Ô]+ textBox1.Text );
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

5 - Converta o retorno para as classes criadas nos passos anteriores, mais ou menos assim:

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Empresa));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(responseBody));
Empresa obj = (Empresa)ser.ReadObject(ms);


Isso já o básico para consumir uma WebAPI. Fiz um exemplo na corrida aqui pra você ver como é. Está em anexo.
KERPLUNK 30/11/2015 20:32:50
#454622
E então, conseguiu entender?
JOAOBENEVIDES 01/12/2015 09:05:45
#454633
sim ja estou fazendo , voce tem algo que voce busca na receita ou faz assim mesmo ?
JOAOBENEVIDES 01/12/2015 10:04:23
#454636
a opcao Paste JSON as classes nao aparece para mim so PASte XML CLASS
KERPLUNK 01/12/2015 11:10:39
#454638
Não, não tenho nada pronto que busque direto na receita federal. Se não me engano, eles disponibilizam um webservice(SOAP) para consulta, mas até onde sei é pago.
Quanto à não aparecer a opção, significa que você está usando um Visual Studio anterior ao 2012, não sei dizer qual versão porque pelo menos do 2012 pra cima essa opção aparece. Mas isso é simplesmente para transformar um JSON em classes, você pode simplesmente copiar as classes do projeto que está em anexo.
JOAOBENEVIDES 01/12/2015 11:32:50
#454642
meue erro esta nesta linha eu preciso add mais algo
KERPLUNK 01/12/2015 11:42:20
#454644
Que versão de Visual Studio e Framework está usando?
JOAOBENEVIDES 01/12/2015 11:47:45
#454645
versao visual studio 12 / net 4.5
KERPLUNK 01/12/2015 11:49:01
#454646
Bom, não vai importar a versão... O erro está acontecendo porque você está tentando usar [Ô]await[Ô] em um método que não está marcado como async, não tinha reparado. Basta adicionar a palavra chave [Ô]async[Ô] na assinatura do método onde as instruções estão, ficando:

private async void btcnpj_Click(object sender, EvenArgs e)
KERPLUNK 01/12/2015 11:57:16
#454647
Os métodos [Ô]GetAsync[Ô] e [Ô]ReadStringAsync[Ô], como o próprio nome diz, são [Ô]async[Ô] ou assíncronos, por isso uso o [Ô]await[Ô] para executá-los. Mas é possível fazer com que eles se comportem como métodos síncronos, dispensando a necessidade da palavra chave [Ô]async[Ô], ficaria assim:

HttpClient client = new HttpClient();
var response = client.GetAsync([Ô]http://receitaws.com.br/v1/cnpj/[Ô] + textbox1.Text).Result;
Empresa obj = null;
if (response.IsSuccessStatusCode)
{
var responseContent = response.Content;
string responseString = responseContent.ReadAsStringAsync().Result;
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Empresa));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(responseString));
obj = (Empresa)ser.ReadObject(ms);

}
Tópico encerrado , respostas não são mais permitidas