Para a pila HTTP de Jena baseada no JDK, introducida en Jena 4.3, configure o transporte que se pasa ao construtor de consultas. Un contrasinal do punto de acceso SPARQL e un contrasinal do proxy poden ser solicitados por máquinas distintas.

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 fragmento constrúe unha execución de consulta. endpointUrl é o URL real do servizo SPARQL; proxyAuthenticator é un java.net.Authenticator fornecido pola aplicación. Executa e pecha a execución da consulta mediante o ciclo de vida habitual de consultas da aplicación.

No método getPasswordAuthentication dese autenticador, devolve o PasswordAuthentication do proxy só cando getRequestorType() == RequestorType.PROXY e cando o host e o port solicitantes coinciden co intermediario configurado. Devolve null para os desafíos non relacionados. Engadir este obxecto ao cliente mantén a escolla local a ese cliente.

Le o que pide o proxy

Unha resposta 407 indica un desafío de autenticación do proxy. A súa cabeceira Proxy-Authenticate indica os esquemas ofrecidos; o estado por si só non distingue Basic de NTLM nin doutro esquema.

Compara esa oferta coas capacidades e a política de autenticación do cliente JDK despregado. Fornecer un nome de usuario e un contrasinal non engade un esquema non admitido. Para destinos HTTPS, revisa tamén a política jdk.http.auth.tunneling.disabledSchemes do JDK; o proxy HTTP común ten un axuste disabledSchemes á parte. Os valores predeterminados do JDK para a autenticación Basic en CONNECT son unha desas comprobacións de política.

Os exemplos históricos de Jena con Apache HttpClient e SimpleNTAuthenticator pertencen a unha xeración de transporte anterior. Se o proxy corporativo esixe un mecanismo de autenticación que o transporte actual non ofrece, acorda unha integración compatible co administrador de rede en lugar de tentar encaixar eses obxectos de autenticación antigos no construtor moderno.

Artigos relacionados