Para a pilha HTTP do Jena baseada no JDK, introduzida no Jena 4.3, configure o transporte passado ao construtor de consultas. Uma senha do endpoint SPARQL e uma senha do proxy podem ser solicitadas por máquinas diferentes.

import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.http.HttpClient;
import org.apache.jena.sparql.exec.http.QueryExecutionHTTP;

var http = HttpClient.newBuilder()
    .proxy(ProxySelector.of(
        new InetSocketAddress("proxy.example", 8080)))
    .authenticator(proxyAuthenticator)
    .build();

var execution = QueryExecutionHTTP.service(endpointUrl)
    .httpClient(http)
    .query("ASK { ?s ?p ?o }")
    .build();

O trecho constrói uma execução de consulta. endpointUrl é a URL real do serviço SPARQL; proxyAuthenticator é um java.net.Authenticator fornecido pela aplicação. Execute e feche a execução da consulta pelo ciclo de vida normal de consultas da aplicação.

No método getPasswordAuthentication desse autenticador, devolva o PasswordAuthentication do proxy apenas quando getRequestorType() == RequestorType.PROXY e quando o host e a porta solicitantes corresponderem ao intermediário configurado. Devolva null para desafios não relacionados. Anexar este objeto ao cliente mantém a escolha local a esse cliente.

Leia o que o proxy pede

Uma resposta 407 indica um desafio de autenticação de proxy. Seu cabeçalho Proxy-Authenticate informa os esquemas oferecidos; o status sozinho não distingue Basic de NTLM nem de outro esquema.

Compare essa oferta com as capacidades e a política de autenticação do cliente JDK implantado. Fornecer nome de usuário e senha não acrescenta um esquema não suportado. Para destinos HTTPS, examine também a política jdk.http.auth.tunneling.disabledSchemes do JDK; o proxy HTTP comum tem uma configuração disabledSchemes separada. Os padrões do JDK para autenticação Basic em CONNECT são uma dessas verificações de política.

Os exemplos históricos de Jena com Apache HttpClient e SimpleNTAuthenticator pertencem a uma geração de transporte mais antiga. Se o proxy corporativo exigir um mecanismo de autenticação indisponível no transporte atual, combine uma integração suportada com o administrador de rede em vez de tentar encaixar esses objetos antigos de autenticação no construtor moderno.

Artigos relacionados