1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.any23.http;
19
20 import java.io.IOException;
21 import java.io.InputStream;
22
23 /**
24 * Abstraction for opening an {@link InputStream} on an HTTP IRI.
25 *
26 * @author Richard Cyganiak (richard@cyganiak.de)
27 */
28 public interface HTTPClient {
29
30 /**
31 * Initializes the HTTP client.
32 *
33 * @param configuration
34 * configuration for the HTTP Client.
35 */
36 void init(HTTPClientConfiguration configuration);
37
38 /**
39 * Opens the input stream for the given target IRI.
40 *
41 * @param uri
42 * target IRI.
43 *
44 * @return input stream to access IRI content.
45 *
46 * @throws IOException
47 * if any error occurs while reading the IRI content.
48 */
49 InputStream openInputStream(String uri) throws IOException;
50
51 /**
52 * Release all static resources help by the instance. Call this method only if you are sure you will not use it
53 * again in your application, like for example when shutting down a servlet context.
54 */
55 void close();
56
57 /**
58 * The value of the Content-Type header reported by the server. Can be <code>null</code>.
59 *
60 * @return the content type as string.
61 */
62 String getContentType();
63
64 /**
65 * @return content length in bytes.
66 */
67 long getContentLength();
68
69 /**
70 * Returns the actual IRI from which the document was fetched. This might differ from the IRI passed to
71 * openInputStream() if a redirect was performed. A return value of <code>null</code> means that the IRI is
72 * unchanged and the original IRI was used.
73 *
74 * @return actual document IRI.
75 */
76 String getActualDocumentIRI();
77
78 }