Quantcast
Channel: Programação - GUJ
Viewing all articles
Browse latest Browse all 33093

Coletor de Dados Receita Federal não preenche append

$
0
0

@FabioDaros escreveu:

Galera nao esta retornando os dados append preenchidos. Alguem pode ajudar.

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class Main {

private JFrame mainFrame = new JFrame("CNPJ Catcher");
private JFrame popup	 = new JFrame("Resultado");

private JLabel cnpjLabel = new JLabel("Informe o CNPJ");

private JTextField cnpjTextField = new JTextField();
private JTextField captchaTextField = new JTextField();

private JButton enviarJButton = new JButton("Enviar");
private JButton trocarImagemJButton = new JButton("Trocar imagem");

private String cookie = "";
private String session = "";

public static void main(String[] args) {
	new Main().initMainFrame();
}

public void initMainFrame() {
	getReceitaSessionData();

	GridLayout gl = new GridLayout(3, 2);
	JFrame jf = new JFrame("CNPJ Catcher");
	mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	jf.setLayout(gl);
	jf.setSize(400, 250);

	jf.add(cnpjLabel);
	cnpjTextField.setSize(20, 100);
	cnpjTextField.setText("22873389000112"); // remover
	jf.add(cnpjTextField);

	final JLabel imageLabel = getCaptchaLabel();
	imageLabel.setSize(200, 90);
	jf.add(imageLabel);
	jf.add(captchaTextField);

	/* classe anônima para o evento do btn Enviar */
	enviarJButton.addActionListener(new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent arg0) {
			popup = new JFrame("Resultado " + new Date());
			popup.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
			popup.setSize(640, 480);
			JEditorPane textArea = new JEditorPane();
			textArea.setSize(620, 460);
			//textArea.setContentType("text/html");
			textArea.setText(getCleanFields(getData()));
			JScrollPane scrollPane = new JScrollPane(textArea);
			scrollPane.setSize(620, 460);
			popup.getContentPane().add(scrollPane, BorderLayout.CENTER);
			popup.setVisible(true);
		}
	});
	
	/* classe anônima para o evento do btn Trocar Imagem */
	trocarImagemJButton.addActionListener(new ActionListener() {
		@Override
		public void actionPerformed(ActionEvent e) {
			ImageIcon ii = new ImageIcon(getCnpjCaptcha());
			imageLabel.setIcon(ii);
		}
	});
	
	jf.add(enviarJButton);
	jf.add(trocarImagemJButton);
	jf.setVisible(true);
}

/**
 * Retorna uma conexão Http a partir de uma URL
 * @param url String representando a URL	
 * @return HttpURLConnection
 */
public HttpURLConnection getHttpUrlConnection(String url) {
	try {
		return (HttpURLConnection) new URL(url).openConnection();
	} catch (MalformedURLException e) {
		e.printStackTrace();
		return null;
	} catch (IOException e) {
		e.printStackTrace();
		return null;
	}
}

/**
 * Pega os dados de sessão do site da Receita
 */
public void getReceitaSessionData() {
	try {
		HttpURLConnection http = getHttpUrlConnection("http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/Cnpjreva_Solicitacao2.asp");
		
		http.setRequestProperty("Cookie", "flag=0");
		http.setInstanceFollowRedirects(true);
		
		http.connect();
		
		Map<String, List<String>> reqMap = http.getHeaderFields();
		StringBuilder sb = new StringBuilder();
		for(Map.Entry<String, List<String>> e : reqMap.entrySet()) {
			for(String i : e.getValue()) {
				sb.append(e.getKey())
				  .append(": ")
				  .append(i)
				  .append("\n");
				
				if(e.getKey() != null && e.getKey().startsWith("Set-Cookie") && i.contains("SESSION")) {
					session = i.split(";")[0].trim();
				}
			}
		}
		
		http.disconnect();
	} catch(IOException ex) {
		System.out.println("getReceitaSessionData(): não foi possível conectar");
		ex.printStackTrace();
	}
}

/**
 * Retorna o array de bytes da imagem
 * @param is
 * @return byte[]
 */
public byte[] getImageByteArray(InputStream is) {
	try {
		byte[] b1 = new byte[99999];
		int b;
		int i = 0;
		while((b = is.read()) != -1) {
			b1[i] = (byte) b;
			i++;
		}
		byte[] b2 = Arrays.copyOf(b1, i);
		return b2;
	} catch(IOException ex) {
		ex.printStackTrace();
		return null;
	}
}

/**
 * Retorna o objeto imagem correspondente ao captcha
 * @return Image
 */
public Image getCnpjCaptcha() {
	try {
		HttpURLConnection http = getHttpUrlConnection("http://www.receita.fazenda.gov.br/scripts/srf/intercepta/captcha.aspx?opt=image");
		http.setRequestProperty("Cookie", session + "; cookieCaptcha=;");
		http.connect();
		
		//TODO: remover 1
		System.out.println("getCnpjCaptcha(): session enviada para a gerar a imagem: " + session);
		
		cookie = getCookieCaptcha(http.getHeaderField("Set-Cookie"));
		
		// TODO: remover 2
		System.out.println("getCnpjCaptcha(): Set-Cookie: " + http.getHeaderField("Set-Cookie"));
		System.out.println("\n\n\nHeader: " + getRequestHeaders(http.getHeaderFields()));
		
		/* cria a imagem a partir dos bytes da requisição http */
		Image img = java.awt.Toolkit.getDefaultToolkit().createImage(getImageByteArray(http.getInputStream()));
		
		// TODO remover 1
		System.out.println("getCnpjCaptcha(): cookie: " + cookie);
		
		http.disconnect();
		return img;
	} catch(Exception ex) {
		System.out.println("getCnpjCaptcha(): erro ao construir imagem captcha");
		ex.printStackTrace();
		return null;
	}
}

/**
 * Retorna um JLabel contendo a imagem do captcha
 * @return JLabel
 */
public JLabel getCaptchaLabel() {
	JLabel jl = new JLabel();
	Icon icon = new ImageIcon(getCnpjCaptcha());
	jl.setIcon(icon);
	return jl;
}

/**
 * Retira par cookie do source
 * @param src String de origem
 * @return String contendo o par=valor do cookie
 */
public String getCookieCaptcha(String src) {
	// TODO: remover 1
	System.out.println("Full-cookie: " + src);

	String[] parts = src.split(";");
	for(String item : parts) {
		if(item.trim().startsWith("cookieCaptcha")) {
			return item.trim();
		}
	}
	return null;
}

/**
 * Exemplo do post:  
 * 		origem=comprovante&cnpj=31456338000186&idLetra=hyhb&idSom=&submit1=Consultar&search_type=cnpj
 * 
 * Retorna os dados lidos da receita
 * @return String
 */
public String getData() {
	try {
		HttpURLConnection http = getHttpUrlConnection("http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida.asp");

		http.setRequestMethod("POST");

		String cookieProperty = "flag=1; " + session + "; " + cookie;
		http.setRequestProperty("Cookie", cookieProperty);
		
		http.setInstanceFollowRedirects(false);
		http.setDoInput(true);
		http.setDoOutput(true);
		http.setUseCaches(false);
		
		String params = URLEncoder.encode("origem",      "UTF-8")  + "=" + URLEncoder.encode("comprovante",			      "UTF-8")
	    		+ "&" + URLEncoder.encode("cnpj",        "UTF-8")  + "=" + URLEncoder.encode(cnpjTextField.getText(),	  "UTF-8") 
	    		+ "&" + URLEncoder.encode("idLetra",     "UTF-8")  + "=" + URLEncoder.encode(captchaTextField.getText(),  "UTF-8")
	    		+ "&" + URLEncoder.encode("idSom",       "UTF-8")  + "=" + URLEncoder.encode("", 						  "UTF-8")
	    		+ "&" + URLEncoder.encode("submit1", 	 "UTF-8")  + "=" + URLEncoder.encode("Consultar",				  "UTF-8")
	    		+ "&" + URLEncoder.encode("search_type", "UTF-8")  + "=" + URLEncoder.encode("cnpj",		 			  "UTF-8");

		http.setRequestProperty("Content-Length", "" + Integer.toString(params.getBytes().length));
		http.connect();
		System.out.println("Method: "  		   + http.getRequestMethod());

		DataOutputStream dos = new DataOutputStream(http.getOutputStream());
		dos.writeBytes(params);
		dos.flush();
		dos.close();

		// TODO: remover 5
		System.out.println("getCnpjCaptcha(): Response Cookie: "   + http.getHeaderField("Set-Cookie"));
		System.out.println("getCnpjCaptcha(): Method: "  		   + http.getRequestMethod());
		System.out.println("getCnpjCaptcha(): Content: " 		   + http.getContent().toString());
		System.out.println("getCnpjCaptcha(): Content Type: "      + http.getContentType().toString());
		System.out.println("getCnpjCaptcha(): Response Code: "     + http.getResponseCode());
		
		BufferedReader br = new BufferedReader(new InputStreamReader(http.getInputStream()));
		String aux;
		StringBuilder inputStr = new StringBuilder();
		while((aux = br.readLine()) != null) {
			inputStr.append(aux)
					.append("\n");
		}
		br.close();
		
		http.disconnect();
		return getCnpjData(inputStr.toString());
	} catch(Exception ex) {
		ex.printStackTrace();
		return null;
	}
}

/**
 * TODO: remover *
 * Mostra o header da requisição
 * @param headerMap
 * @return String 
 */
public String getRequestHeaders(Map<String, List<String>> headerMap) {
	StringBuilder sb = new StringBuilder();
	for(Map.Entry<String, List<String>> e : headerMap.entrySet()) {
		for(String i : e.getValue()) {
			sb.append(e.getKey())
			  .append(": ")
			  .append(i)
			  .append("\n");                         
		}
	}
	return sb.toString();
}

/**
 * Recebe o link de redirecionamento e busca os dados da empresa
 * @param source
 * @return String
 */
public String getCnpjData(String source) {
	try {
		source = source.substring(source.indexOf("\"") + 1, source.lastIndexOf("\""));
		
		HttpURLConnection http = getHttpUrlConnection("http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/" + source.replaceAll("&amp;", "&"));
		http.setDoInput(true);
		http.setDoOutput(true);
		http.setInstanceFollowRedirects(true);
		http.setRequestProperty("Cookie", "flag=1; " + cookie + "; " + session);
		http.connect();
		
		BufferedReader br = new BufferedReader(new InputStreamReader(http.getInputStream(), Charset.forName("ISO-8859-1")));
		String aux;
		StringBuilder inputStr = new StringBuilder();
		while((aux = br.readLine()) != null) {
			inputStr.append(aux)
					.append("\n");
		}
		br.close();
		http.disconnect();
		return inputStr.toString();
	} catch(IOException ex) {
		ex.printStackTrace();
	}
	return source;
}

/**
 * Retorna os campos que serão utilizados
 * @param data
 * @return
 */
public String getCleanFields(String data) {
	DataFilter df = new DataFilter(data);
	StringBuilder out = new StringBuilder();
	
	String header = "";
	
	header = "NOME EMPRESARIAL";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "TÍTULO DO ESTABELECIMENTO (NOME DE FANTASIA)";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "NÚMERO DE INSCRIÇÃO";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "COMPROVANTE DE INSCRIÇÃO E DE SITUAÇÃO CADASTRAL";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "CÓDIGO E DESCRIÇÃO DA ATIVIDADE ECONÔMICA PRINCIPAL";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "CÓDIGO E DESCRIÇÃO DAS ATIVIDADES ECONÔMICAS SECUNDÁRIAS";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "CÓDIGO E DESCRIÇÃO DA NATUREZA JURÍDICA";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "LOGRADOURO";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "NÚMERO";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "COMPLEMENTO";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "CEP";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "BAIRRO/DISTRITO";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "UF";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "SITUAÇÃO CADASTRAL";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "DATA DA SITUAÇÃO CADASTRAL";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "MOTIVO DE SITUAÇÃO CADASTRAL";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	header = "DATA DA SITUAÇÃO ESPECIAL";
	out.append(header + "\t")
	   .append(": ")
	   .append(df.getInfo(header))
	   .append("\n");
	
	return out.toString();
}

}

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
* Filtra os dados retornados pela receita
* @author jaumzera
*
*/
public class DataFilter {

private String data;

/**
 * Construtor
 * @param data String contendo os dados
 */
public DataFilter(String data) {
	try {
		this.data = data;
		clearData();
	} catch(Exception ex) {
		this.data = "";
	}
}

/**
 * Limpa as partes do HTML que não serão utilizados
 */
private void clearData() {
	data = data.substring(data.indexOf("<!-- Início Cabeçalho"), data.indexOf("Fim da tabela principal -->"));
	data = data.replaceAll("\n+|[\\s\\t]+", " ")
			   .replaceAll("<!--.+?-->", "");
	
	/* gambi_mode: on;
	 * Substitui uma das palavras "Número" para evitar conflitos */
	data = data.replaceAll("NÚMERO DE INSCRIÇÃO", "CNPJ");
	
}

/**
 * Retorna a informação de acordo com o cabeçalho
 * @param header cabeçalho
 * @return String contendo a informação solicitada ou ""
 */
public String getInfo(String header) {
	try {
		int ini = data.indexOf(header) + header.length();
		String info = data.substring(ini, data.indexOf("</td>", ini));
		return info.replaceAll("<.+?>|[\t\n]+|[\\s]{2,}", " ").trim();
	} catch(Exception ex) {
		return "*";
	}
}

/**
 * Main para testes
 * @param args
 * @throws IOException 
 */
public  void main(String[] args) throws IOException {
	/* abre um arquivo local com os mesmos dados que a Receita retorna */
	FileReader fr = new FileReader("C:\\Users\\Fabio\\Documents\\comprovante.html");
	BufferedReader br = new BufferedReader(fr);
	String aux;
	StringBuilder sb = new StringBuilder();
	while((aux = br.readLine()) != null) {
		sb.append(aux).append("\n");
	}
	
	String html = sb.substring(sb.indexOf("<!-- Início Cabeçalho"), sb.indexOf("Fim da tabela principal -->"));
	html = html.replaceAll("\n+|[\\s\\t]+", " ")
			   .replaceAll("<!--.+?-->", "");
	
	String header = "NOME EMPRESARIAL";
	int ini = html.indexOf(header) + header.length();
	String info = html.substring(ini, html.indexOf("</td>", ini));
	System.out.println(info.replaceAll("<.+?>|[\t\n]+|[\\s]{2,}", "").trim());
	
	header = "TÍTULO DO ESTABELECIMENTO (NOME DE FANTASIA)";
	ini = html.indexOf(header) + header.length();
	info = html.substring(ini, html.indexOf("</td>", ini));
	System.out.println(info.replaceAll("<.+?>|[\t\n]+|[\\s]{2,}", " ").trim());
}

}

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CnpjCatcher {

/* cookie de sessão do site da receita.fazenda.gov.br */
private String sessionId;

/* cookie do captcha da imagem da receita.fazenda.gov.br */
private String cookieCaptcha;

/* classe que filtra os dados retornados por receita.fazenda.gov.br */
private DataFilter dataFilter;

/**
 * Construtor
 */
public CnpjCatcher() {
	/* carrega os dados de sessão da receita.fazenda.gov.br */
	loadReceitaSessionData();
}

/**
 * Retira par cookie do source
 * @param src String de origem
 * @return String contendo o par=valor do cookie
 */
private String getCookieCaptcha(String src) {
	String[] parts = src.split(";");
	for(String item : parts) {
		if(item.trim().startsWith("cookieCaptcha")) {
			return item.trim();
		}
	}
	return null;
}

/**
 * Retorna o array de bytes da imagem
 * @param is
 * @return byte[]
 */
private byte[] getImageByteArray(InputStream is) {
	try {
		byte[] b1 = new byte[99999];
		int b;
		int i = 0;
		while((b = is.read()) != -1) {
			b1[i] = (byte) b;
			i++;
		}
		byte[] b2 = Arrays.copyOf(b1, i);
		return b2;
	} catch(IOException ex) {
		ex.printStackTrace();
		return null;
	}
}

/**
 * Retorna uma conexão Http a partir de uma URL
 * @param url String representando a URL	
 * @return HttpURLConnection
 */
private HttpURLConnection getHttpUrlConnection(String url) {
	try {
		return (HttpURLConnection) new URL(url).openConnection();
	} catch (MalformedURLException e) {
		e.printStackTrace();
		return null;
	} catch (IOException e) {
		e.printStackTrace();
		return null;
	}
}

/**
 * Pega os dados de sessão do site da Receita
 * @return String contendo o cookie correspondente ao session
 * 		   gerado pelo site receita.fazenda.gov.br
 */
private void loadReceitaSessionData() {
	try {
		HttpURLConnection http = getHttpUrlConnection("http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/Cnpjreva_Solicitacao2.asp");
		http.setRequestProperty("Cookie", "flag=0");
		http.setInstanceFollowRedirects(true);
		http.connect();
		
		Map<String, List<String>> reqMap = http.getHeaderFields();
		StringBuilder sb = new StringBuilder();
		for(Map.Entry<String, List<String>> e : reqMap.entrySet()) {
			for(String i : e.getValue()) {
				if(e.getKey() != null && e.getKey().startsWith("Set-Cookie") && i.contains("SESSION")) {
					sessionId = i.split(";")[0].trim();
				}
			}
		}
		
		http.disconnect();
	} catch(IOException ex) {
		ex.printStackTrace();
	}
}

/**
 * Retorna o array de bytes correspondente à imagem captcha 
 * do site receita.fazenda.gov.br e armazena o cookie enviado
 * na variável cookieCaptcha
 * 
 * @return byte[] correspondente à imagem
 */
public byte[] getCaptchaImageBytes() {
	if(sessionId == null) {
		throw new RuntimeException("Não há id de sessão");
	}

	try {
		HttpURLConnection http = getHttpUrlConnection("http://www.receita.fazenda.gov.br/scripts/srf/intercepta/captcha.aspx?opt=image");
		http.setRequestProperty("Cookie", sessionId + "; cookieCaptcha=;");
		http.connect();
		cookieCaptcha = getCookieCaptcha(http.getHeaderField("Set-Cookie"));
		byte[] imageByteArray = getImageByteArray(http.getInputStream());
		http.disconnect();
		return imageByteArray;
	} catch(IOException ex) {
		ex.printStackTrace();
		return null;
	}
}

/**
 * Exemplo do post:  
 * 		origem=comprovante&cnpj=31456338000186&idLetra=hyhb&idSom=&submit1=Consultar&search_type=cnpj
 * 
 * Retorna os dados lidos da receita
 * @return String
 */
public void postData(String captcha, String cnpj) {
	try {
		/* conecta e configura o header HTTP */
		HttpURLConnection http = getHttpUrlConnection("http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida.asp");
		http.setRequestMethod("POST");
		String cookieProperty = "flag=1; " + sessionId + "; " + cookieCaptcha;
		http.setRequestProperty("Cookie", cookieProperty);
		http.setInstanceFollowRedirects(false);
		http.setDoInput(true);
		http.setDoOutput(true);
		http.setUseCaches(false);
		
		String params = URLEncoder.encode("origem",      "UTF-8")  + "=" + URLEncoder.encode("comprovante",			      "UTF-8")
	    		+ "&" + URLEncoder.encode("cnpj",        "UTF-8")  + "=" + URLEncoder.encode(cnpj,	  					  "UTF-8") 
	    		+ "&" + URLEncoder.encode("idLetra",     "UTF-8")  + "=" + URLEncoder.encode(captcha,  					  "UTF-8")
	    		+ "&" + URLEncoder.encode("idSom",       "UTF-8")  + "=" + URLEncoder.encode("", 						  "UTF-8")
	    		+ "&" + URLEncoder.encode("submit1", 	 "UTF-8")  + "=" + URLEncoder.encode("Consultar",				  "UTF-8")
	    		+ "&" + URLEncoder.encode("search_type", "UTF-8")  + "=" + URLEncoder.encode("cnpj",		 			  "UTF-8");

		http.setRequestProperty("Content-Length", "" + Integer.toString(params.getBytes().length));
		http.connect();

		/* faz o POST */
		DataOutputStream dos = new DataOutputStream(http.getOutputStream());
		dos.writeBytes(params);
		dos.flush();
		dos.close();

		/* recebe os dados e armazena em um StringBuffer a página retornada */
		/* NOTE: a página retornada, neste caso, é uma página de redirecionamento que 
		 * o HttpURLConnection não consegue seguir por si só. O método getCnpjData
		 * retira a URL retornada dessa página e faz uma outra requisição ao servidor
		 * receita.fazenda.gov.br para então ter acesso ao cartão de informações do
		 * CNPJ especificado */
		BufferedReader br = new BufferedReader(new InputStreamReader(http.getInputStream()));
		String aux;
		StringBuilder inputStr = new StringBuilder();
		while((aux = br.readLine()) != null) {
			inputStr.append(aux).append("\n");
		}
		br.close();
		http.disconnect();
		dataFilter = new DataFilter(getCnpjData(inputStr.toString()));
	} catch(Exception ex) {
		ex.printStackTrace();
		throw new RuntimeException("A requisição retornou um erro: " + ex.getMessage());
	}
}

/**
 * Recebe a página com o link de redirecionamento e busca os dados da empresa
 * @param source
 * @return String
 */
public String getCnpjData(String source) {
	try {
		/* Retira somente a URL do endereço href="..." */
		source = source.substring(source.indexOf("\"") + 1, source.lastIndexOf("\""));
		
		HttpURLConnection http = getHttpUrlConnection("http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/" 
				+ source.replaceAll("&amp;", "&"));
		http.setDoInput(true);
		http.setDoOutput(true);
		http.setInstanceFollowRedirects(true);
		http.setRequestProperty("Cookie", "flag=1; " + cookieCaptcha + "; " + sessionId);
		http.connect();
		
		BufferedReader br = new BufferedReader(new InputStreamReader(http.getInputStream(), 
				Charset.forName("ISO-8859-1")));
		String aux;
		StringBuilder inputStr = new StringBuilder();
		while((aux = br.readLine()) != null) {
			inputStr.append(aux)
					.append("\n");
		}
		br.close();
		http.disconnect();
		return inputStr.toString();
	} catch(IOException ex) {
		ex.printStackTrace();
	}
	return source;
}

/**
 * Retorna um Map com os campos retornados pelo site receita.fazenda.gov.br
 * no formato: {nomeDoCampo=valor}.
 * 
 * @param fieldList lista de campos que serão consultados
 * @return Map<String, String> contendo os valores associados à lista
 * 		   especificada
 */
public Map<String, String> getCnpjDataMap(List<String> fieldList) {
	if(dataFilter == null) {
		throw new RuntimeException("Não existem dados no filtro");
	}
	
	Map<String, String> resultMap = new HashMap<String, String>();
	for(String item : fieldList) {
		resultMap.put(item, dataFilter.getInfo(item));
	}
	
	return resultMap;
}

}

Mensagens: 1

Participantes: 1

Ler tópico completo


Viewing all articles
Browse latest Browse all 33093


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>