Dei uma estudada nessa biblioteca HttpClient e segui os passos explicados lá.
então seguindo os passos do exemlo eu pego o retorno e gero a imagem salvando em png.
InputStream instream = entidade.getContent();
BufferedImage b = null;
b = ImageIO.read(instream);
ImageIO.write(b, "PNG", new File(realPath + "/captcha/" + "captcha" + mili1 + ".png"));
então chamo esse método no value da imagem que ao carregar na gera o get e salva a imagem para mostrar.
depois no segundo método tive que encontrar os parâmetros ja que o exemplo era para o CNPJ que na verdade é o mesmo processo:
// Criando o método de acesso
// Lista de parâmetros
List<NameValuePair> nameValuePairs = new ArrayList<>();
// Adicionando os parâmetros
nameValuePairs.add(new BasicNameValuePair("txtCPF", cpf));
nameValuePairs.add(new BasicNameValuePair("txtTexto_captcha_serpro_gov_br", captcha1));
nameValuePairs.add(new BasicNameValuePair("Enviar", "Consultar"));
// Encapsulando
UrlEncodedFormEntity urlEncodedFormEntity = null;
try {
// Pelo fonte da página da receita o sistema adequado de parâmetros é em UTF-8
urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairs, "ISO-8859-1");
} catch (UnsupportedEncodingException exception) {
System.out.println("UnsupportedEncodingException requisição: " + exception.getMessage());
}
// A adição dos parâmetros
requisição3.setEntity(urlEncodedFormEntity);
try {
// Resposta
resposta = null;
resposta = cliente.execute(requisição3, contexto);
} catch (IOException exception) {
System.out.println("IOException requisição3: " + exception.getMessage());
}
// Buscando a entidade
entidade = resposta.getEntity();
// Pego o código fonte e jogo na string
try {
html = EntityUtils.toString(entidade);
} catch (IOException | ParseException exception) {
System.out.println("IOException String HTML: " + exception.getMessage());
}
daqui pra gente é so varrer esse HTML e pegar o retorno.
//verifico se contem os valores de nome
if (conteudo.contains("Nome da Pessoa Física:")) {
int index = 0;
//Pego a posição incial dos valores fixos
int pos1 = conteudo.indexOf("No do CPF:", index);
index = pos1;
int pos2 = conteudo.indexOf("Nome da Pessoa Física:", index);
index = pos2;
int pos3 = conteudo.indexOf("Situação Cadastral:", index);
//Copia o valor de acordo com as posições identificadas somado a quantidade de caracteres delas.
cpf = conteudo.substring(pos1 + 10, (pos2 - 1));
nome = conteudo.substring(pos2 + 22, (pos3 - 1));