blob: d95b666f0a5390b7f85e048560d5bd656606a07f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.http;
import java.net.http.HttpClient;
import java.net.http.HttpClient.Redirect;
import java.time.Duration;
import org.apache.jena.http.sys.RegistryRequestModifier;
import org.apache.jena.riot.RDFFormat;
/**
* JVM wide settings.
*/
public class HttpEnv {
// These preserve prefixes.
public static final RDFFormat defaultTriplesFormat = RDFFormat.TURTLE_BLOCKS;
public static final RDFFormat defaultQuadsFormat = RDFFormat.TRIG_BLOCKS;
/**
* Maximum length of URL for GET requests for SPARQL queries
* (<a href="https://www.w3.org/TR/sparql11-protocol/">SPARQL 1.1 Protocol</a>).
* Above this limit, the code switches to using the HTTP POST form.
*/
public static /* final */ int urlLimit = 2 * 1024;
public static HttpClient getDftHttpClient() { return httpClient; }
public static void setDftHttpClient(HttpClient dftHttpClient) { httpClient = dftHttpClient; }
/** Return the {@link HttpClient} based on URL and a possible pre-selected {@link HttpClient}. */
public static HttpClient getHttpClient(String url, HttpClient specificHttpClient) {
if ( specificHttpClient != null )
return specificHttpClient;
HttpClient requestHttpClient = RegistryHttpClient.get().find(url);
if ( requestHttpClient == null )
requestHttpClient = getDftHttpClient();
return requestHttpClient;
}
private static HttpClient httpClient = buildDftHttpClient();
private static HttpClient buildDftHttpClient() {
return httpClientBuilder().build();
}
public static HttpClient.Builder httpClientBuilder() {
return HttpClient.newBuilder()
// By default, the client has polling and connection-caching.
// Version HTTP/2 is the default, negotiating up from HTTP 1.1.
//.version(Version.HTTP_2)
.connectTimeout(Duration.ofSeconds(10))
// Redirect.NORMAL - this does not follow https to http 3xx.
// (Dec 2021) http://purl.org first switches to https://purl.org, then will redirect to an http: URL.
.followRedirects(Redirect.ALWAYS)
//.sslContext
//.sslParameters
//.proxy
//.authenticator
;
}
/** Reset any Jena system state related to HTTP */
public static void reset() {
RegistryHttpClient.get().clear();
RegistryRequestModifier.get().clear();
}
}