带有代理的 Apache HttClient 在 Tomcat 中不起作用

Apache HttClient with Proxy not working in the Tomcat

提问人:Emmanuel Thadeu Souza Trindade 提问时间:11/10/2023 最后编辑:BalusCEmmanuel Thadeu Souza Trindade 更新时间:11/11/2023 访问量:38

问:

我有一个使用 Jsf 和 Apache HttpClient 制作的 Web 应用程序。当尝试使用需要代理进行通信的 API 时,如果我通过服务器上的命令行运行代码,它可以工作,但是如果我通过 Tomcat 通过 Web 应用程序运行相同的代码,我会收到“名称或服务未知”错误。

Java versão 11 Apache HttpClient 4.5.14

private String getCpf(String tokenClient) throws IOException {
    String result = null;
    try {
        System.out.println("Inicio do processamento.....");
        
        System.out.println("Token informado: " + tokenClient);
        
        ObjectMapper objectMapper = new ObjectMapper();
        
        
        System.out.println("Configurando o proxy...");
        HttpHost proxy = new HttpHost("111.111.111.111", 8080);
        DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy);
        //HttpClient httpClient = HttpClients.custom().setRoutePlanner(routePlanner).build();
        HttpClient httpClient = HttpClients.createDefault();
        
        HttpGet httpGet = new HttpGet(
                "https://servidor.com.br/api-servidor/api/login/validatoken");

        httpGet.addHeader("Authorization", "Bearer " + tokenClient.replace("\"", ""));

        httpGet.addHeader("accept", "application/json");
        
        System.out.println("Antes do envio....");
        
        HttpResponse response = httpClient.execute(httpGet);
        System.out.println("Apos o envio....");
    
        System.out.println("Coletando o retorno....");
        HttpEntity entity = response.getEntity();
        System.out.println("Código do retorno: " + response.getStatusLine().getStatusCode());
        if (entity != null && response.getStatusLine().getStatusCode() == 200) {
            System.out.println("Retorno em string: " + EntityUtils.toString(entity));
            result = EntityUtils.toString(entity);
            System.out.println("Convertendo o retorno em json....");
            JsonNode jsonNode = objectMapper.readTree(result);
            
            result = jsonNode.get("cpfcnpj").asText();
            System.out.println("Cpf retornado: " + result);
        }
    } catch (IOException e) {
        System.out.println("Erro: " + e.getMessage());
        return result;
    }
    
    System.out.println("Fim da execução....");
    return result;
}

我已经尝试通过环境变量和 Tomcat 的 setenv.xml 设置代理,但它只有在我在 Tomcat 之外运行它时才有效。

java tomcat httpclient

评论

0赞 bluelabel 11/10/2023
检查此答案: stackoverflow.com/a/39358838/936329
0赞 Emmanuel Thadeu Souza Trindade 11/11/2023
感谢您的反馈,但是实现正在工作,不起作用的是当通过 Tomcat 调用使用 Api 时。小说有问题的代理是没有身份验证的类型。

答: 暂无答案