Olá Pessoal, estou com um problema… preciso acessar o site do Denatran e retornar os dados de uma determinada pessoa, ate ae tudo bem, consigo o codigo da pagina e passar os parametros (que são CPF, RENAVAN e o captcha)… Mas o problema é que a imagem do captcha que meu codigo baixa não é o mesmo que é gereado pelo site do Denatran e dae não passa na validação…
se alguem puder me dar uma ajuda… abaixo tem o codigo que estou utilizando…
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import com.DeathByCaptcha.DeCaptcha;
import com.kontato.allcheck.app.robot.acia.RobotUtil;
import com.kontato.allcheck.util.RegularExp;
import com.technique.engine.app.SystemParameter;
import com.technique.engine.util.ExceptionWarning;
import com.technique.engine.util.TechCommonKeys;
public class Denatran {
private String cookie = "";
@SuppressWarnings("deprecation")
private String doGet() {
try {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpget1 = new HttpGet("http://denatran.serpro.gov.br/Veiculo_Consulta.asp");
setHeader(httpget1);
HttpResponse response = httpclient.execute(httpget1);
HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity);
System.out.println("Login form get: " + response.getStatusLine());
if (entity != null) {
entity.consumeContent();
}
// System.out.println("Initial set of cookies:");
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None");
} else {
for (int i = 0; i < cookies.size(); i++) {
// System.out.println("- " + cookies.get(i).toString());
cookie += cookies.get(i).getName() + "=" + cookies.get(i).getValue() + ";";
}
}
return content;
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
private void setHeader(HttpPost httpPost1) {
httpPost1.setHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
httpPost1.setHeader("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.3");
httpPost1.setHeader("Accept-Encoding","gzip,deflate,sdch");
httpPost1.setHeader("Accept-Language","pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4");
httpPost1.setHeader("Cache-Control","max-age=0");
httpPost1.setHeader("Connection","keep-alive");
// httpPost1.setHeader("Content-length","2055");
httpPost1.setHeader("Content-Type","application/x-www-form-urlencoded");
httpPost1.setHeader("Cookie",cookie);
// httpPost1.setHeader("Host", "www.receita.fazenda.gov.br");
// httpPost1.setHeader("Origin","http://www.receita.fazenda.gov.br");
// httpPost1.setHeader("Referer","http://www.receita.fazenda.gov.br/aplicacoes/atcta/cpf/ConsultaPublica.asp");
httpPost1.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11");
}
private void setHeader(HttpGet httpget1) {
httpget1.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
httpget1.setHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
httpget1.setHeader("Accept-Encoding", "gzip,deflate,sdch");
httpget1.setHeader("Accept-Language", "pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4");
httpget1.setHeader("Cache-Control", "max-age=0");
httpget1.setHeader("Connection", "keep-alive");
httpget1.setHeader("Host", "denatran.serpro.gov.br");
httpget1.setHeader("Referer", "http://denatran.serpro.gov.br/includes/menu_cidadao.html");
httpget1.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11");
}
@SuppressWarnings("deprecation")
private String consultarCPF(Map<String, String> form) {
try {
HttpPost httpPost = new HttpPost("http://denatran.serpro.gov.br/Veiculo_Consulta_Result.asp");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("txtCaptcha", form.get("txtCaptcha") ));
nvps.add(new BasicNameValuePair("txtCPFCNPJ", form.get("txtCPFCNPJ") ));
nvps.add(new BasicNameValuePair("txtCodRenavam", form.get("txtCodRenavam") ));
nvps.add(new BasicNameValuePair("hdnMsg", "" ));
nvps.add(new BasicNameValuePair("hdnIntRC", "" ));
httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
setHeader(httpPost);
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httpPost);
HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity);
// System.out.println("Login form get: " + response.getStatusLine());
if (entity != null) {
entity.consumeContent();
}
/*
System.out.println("Post logon cookies:");
List<Cookie> cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
System.out.println("None");
} else {
for (int i = 0; i < cookies.size(); i++) {
System.out.println("- " + cookies.get(i).toString());
}
}
*/
return content;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
private String getImagemCaptcha(String pagina) {
// Pattern pat1 = Pattern.compile("<!-- Início AntiRobo-->.*?<!-- Fim AntiRobo-->", Pattern.CASE_INSENSITIVE + Pattern.DOTALL);
// Pattern pat2 = Pattern.compile("guid=.*?'", Pattern.CASE_INSENSITIVE + Pattern.DOTALL);
// String p = RegularExp.get( pat1, pagina );
// if( p == null ) p = pagina;
// p = RegularExp.get( pat2, p );
// if( p == null ) p = "";
// p = p.replaceAll("'", "").trim();
String p = "http://denatran.serpro.gov.br/includes/captcha/captcha.asp";
return p;
}
// ------------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------------------------
private String download( String url ) throws ExceptionWarning {
String path = SystemParameter.get("allcheck_produtos", TechCommonKeys.TAG_SYSTEM_PROPERTIES, TechCommonKeys.SYSTEM_ROOT_PATH ) + "allcheck_produtos/captcha/" ;
String output = path + "captcha-" + System.currentTimeMillis() + ".jpg";
try {
URL server = new URL(url);
HttpURLConnection connection = (HttpURLConnection)server.openConnection();
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.addRequestProperty("Accept","image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-shockwave-flash, */*");
connection.addRequestProperty("Accept-Language", "en-us,zh-cn;q=0.5");
connection.addRequestProperty("Accept-Encoding", "gzip, deflate");
connection.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 2.0.50727; MS-RTC LM 8)");
connection.addRequestProperty("Host","denatran.serpro.gov.br");
connection.addRequestProperty("Referer","http://denatran.serpro.gov.br/Veiculo_Consulta.asp");
connection.addRequestProperty("Cookie", cookie);
connection.connect();
InputStream is = connection.getInputStream();
OutputStream os = new FileOutputStream(output);
byte[] buffer = new byte[1024];
int byteReaded = is.read(buffer);
while(byteReaded != -1) {
os.write(buffer,0,byteReaded);
byteReaded = is.read(buffer);
}
os.close();
} catch (Exception e) {
e.printStackTrace();
}
return output;
}
private String limparTela(String pagina) {
Pattern patMiolo = Pattern.compile("<table style=\"width: 540px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">.*?</table>", Pattern.CASE_INSENSITIVE + Pattern.DOTALL);
String p = RegularExp.get( patMiolo, pagina );
if( p == null ) p = pagina;
return p;
}
public String processar( String renavam, String cpf ) {
try {
Denatran obj = new Denatran();
String pagina = obj.doGet();
String imagem = obj.getImagemCaptcha(pagina);
String path = obj.download(imagem);
String captcha = DeCaptcha.decode(path);
captcha = captcha.replaceAll(" ", "").trim();
Map<String, String> form = RobotUtil.tratarForm(pagina, "");
form.put("txtCodRenavam", renavam);
form.put("txtCPFCNPJ", cpf);
form.put("txtCaptcha", captcha);
pagina = obj.consultarCPF( form );
pagina = obj.limparTela( pagina );
if( !pagina.toLowerCase().contains("dados do veículo") ) {
System.out.println( pagina );
throw new Exception("Padrão inválido");
// } else {
// String[] campos = tratarResposta(pagina);
// CadastroUnicoEntity cu = new CadastroUnicoEntity();
// cu.atualizarDados( campos );
}
return pagina;
} catch (Exception e) {
e.printStackTrace();
return "Site do Detran indisponível, por favor, tente novamente";
}
}
}