BUSCAR PAGINA EM WINDOWS FORMS
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 ?
http://receitaws.com.br/v1/cnpj/[cnpj]
onde estou tentando buscar informação como faco para buscar informação neste site ?
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:
5 - Converta o retorno para as classes criadas nos passos anteriores, mais ou menos assim:
Isso já o básico para consumir uma WebAPI. Fiz um exemplo na corrida aqui pra você ver como é. Está em anexo.
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.
E então, conseguiu entender?
sim ja estou fazendo , voce tem algo que voce busca na receita ou faz assim mesmo ?
a opcao Paste JSON as classes nao aparece para mim so PASte XML CLASS
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.
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.
meue erro esta nesta linha eu preciso add mais algo
Que versão de Visual Studio e Framework está usando?
versao visual studio 12 / net 4.5
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)
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