Coletor de Dados Receita Federal não preenche append

0 respostas
java
F

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;
	}
}
Criado 7 de março de 2017
Respostas 0
Participantes 1