/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.portal.kernel.util; import aQute.bnd.annotation.ProviderType; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.portlet.ActionRequest; import javax.portlet.RenderRequest; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; /** * @author Brian Wing Shun Chan * @author Hugo Huijser */ @ProviderType public interface Http { public static final String HTTP = "http"; public static final int HTTP_PORT = 80; public static final String HTTP_WITH_SLASH = "http://"; public static final String HTTPS = "https"; public static final int HTTPS_PORT = 443; public static final String HTTPS_WITH_SLASH = "https://"; public static final String PROTOCOL_DELIMITER = "://"; public static final int URL_MAXIMUM_LENGTH = 2083; public String addParameter(String url, String name, boolean value); public String addParameter(String url, String name, double value); public String addParameter(String url, String name, int value); public String addParameter(String url, String name, long value); public String addParameter(String url, String name, short value); public String addParameter(String url, String name, String value); public String decodePath(String path); public String decodeURL(String url); /** * @deprecated As of 7.0.0, replaced by {@link #decodeURL(String)} */ @Deprecated public String decodeURL(String url, boolean unescapeSpaces); public String encodeParameters(String url); public String encodePath(String path); /** * @deprecated As of 7.0.0, replaced by {@link URLCodec#encodeURL(String)} */ @Deprecated public String encodeURL(String url); /** * @deprecated As of 7.0.0, replaced by * {@link URLCodec#encodeURL(String, boolean)} */ @Deprecated public String encodeURL(String url, boolean escapeSpaces); public String fixPath(String path); public String fixPath(String path, boolean leading, boolean trailing); public String getCompleteURL(HttpServletRequest request); public Cookie[] getCookies(); public String getDomain(String url); public String getIpAddress(String url); public String getParameter(String url, String name); public String getParameter(String url, String name, boolean escaped); public Map<String, String[]> getParameterMap(String queryString); public String getPath(String url); public String getProtocol(ActionRequest actionRequest); public String getProtocol(boolean secure); public String getProtocol(HttpServletRequest request); public String getProtocol(RenderRequest renderRequest); public String getProtocol(String url); public String getQueryString(String url); public String getRequestURL(HttpServletRequest request); public boolean hasDomain(String url); public boolean hasProtocol(String url); public boolean hasProxyConfig(); public boolean isNonProxyHost(String host); public boolean isProxyHost(String host); public boolean isSecure(String url); public String normalizePath(String uri); public Map<String, String[]> parameterMapFromString(String queryString); public String parameterMapToString(Map<String, String[]> parameterMap); public String parameterMapToString( Map<String, String[]> parameterMap, boolean addQuestion); public String protocolize(String url, ActionRequest actionRequest); public String protocolize(String url, boolean secure); public String protocolize(String url, HttpServletRequest request); public String protocolize(String url, int port, boolean secure); public String protocolize(String url, RenderRequest renderRequest); public String removeDomain(String url); public String removeParameter(String url, String name); public String removePathParameters(String uri); public String removeProtocol(String url); public String sanitizeHeader(String header); public String setParameter(String url, String name, boolean value); public String setParameter(String url, String name, double value); public String setParameter(String url, String name, int value); public String setParameter(String url, String name, long value); public String setParameter(String url, String name, short value); public String setParameter(String url, String name, String value); public String shortenURL(String url, int count); public byte[] URLtoByteArray(Http.Options options) throws IOException; public byte[] URLtoByteArray(String location) throws IOException; public byte[] URLtoByteArray(String location, boolean post) throws IOException; public InputStream URLtoInputStream(Http.Options options) throws IOException; public InputStream URLtoInputStream(String location) throws IOException; public InputStream URLtoInputStream(String location, boolean post) throws IOException; public String URLtoString(Http.Options options) throws IOException; public String URLtoString(String location) throws IOException; public String URLtoString(String location, boolean post) throws IOException; /** * This method only uses the default Commons HttpClient implementation when * the URL object represents a HTTP resource. The URL object could also * represent a file or some JNDI resource. In that case, the default Java * implementation is used. * * @param url the URL * @return A string representation of the resource referenced by the URL * object * @throws IOException if an IO exception occurred */ public String URLtoString(URL url) throws IOException; public class Auth { public Auth( String host, int port, String realm, String username, String password) { _host = host; _port = port; _realm = realm; _username = username; _password = password; } public String getHost() { return _host; } public String getPassword() { return _password; } public int getPort() { return _port; } public String getRealm() { return _realm; } public String getUsername() { return _username; } private final String _host; private final String _password; private final int _port; private final String _realm; private final String _username; } public class Body { public Body(String content, String contentType, String charset) { _content = content; _contentType = contentType; _charset = charset; } public String getCharset() { return _charset; } public String getContent() { return _content; } public String getContentType() { return _contentType; } private final String _charset; private final String _content; private String _contentType; } public class FilePart { public FilePart( String name, String fileName, byte[] value, String contentType, String charSet) { _name = name; _fileName = fileName; _value = value; _contentType = contentType; _charSet = charSet; } public String getCharSet() { return _charSet; } public String getContentType() { return _contentType; } public String getFileName() { return _fileName; } public String getName() { return _name; } public byte[] getValue() { return _value; } private final String _charSet; private String _contentType; private final String _fileName; private final String _name; private final byte[] _value; } public enum Method { DELETE, GET, HEAD, POST, PUT } public class Options { public void addFilePart( String name, String fileName, byte[] value, String contentType, String charSet) { if (_body != null) { throw new IllegalArgumentException( "File part cannot be added because a body has already " + "been set"); } if (_fileParts == null) { _fileParts = new ArrayList<>(); } FilePart filePart = new FilePart( name, fileName, value, contentType, charSet); _fileParts.add(filePart); } public void addHeader(String name, String value) { if (_headers == null) { _headers = new HashMap<>(); } _headers.put(name, value); } public void addPart(String name, String value) { if (_body != null) { throw new IllegalArgumentException( "Part cannot be added because a body has already been set"); } if (_parts == null) { _parts = new HashMap<>(); } _parts.put(name, value); } public Auth getAuth() { return _auth; } public Body getBody() { return _body; } public Cookie[] getCookies() { return _cookies; } public List<FilePart> getFileParts() { return _fileParts; } public Map<String, String> getHeaders() { return _headers; } public String getLocation() { return _location; } public Method getMethod() { return _method; } public Map<String, String> getParts() { return _parts; } public Response getResponse() { return _response; } public int getTimeout() { return _timeout; } public boolean isDelete() { if (_method == Method.DELETE) { return true; } else { return false; } } public boolean isFollowRedirects() { return _followRedirects; } public boolean isGet() { if (_method == Method.GET) { return true; } else { return false; } } public boolean isHead() { if (_method == Method.HEAD) { return true; } else { return false; } } public boolean isPost() { if (_method == Method.POST) { return true; } else { return false; } } public boolean isPut() { if (_method == Method.PUT) { return true; } else { return false; } } public void setAuth(Http.Auth auth) { setAuth( auth.getHost(), auth.getPort(), auth.getRealm(), auth.getUsername(), auth.getPassword()); } public void setAuth( String host, int port, String realm, String username, String password) { _auth = new Auth(host, port, realm, username, password); } public void setBody(Http.Body body) { setBody( body.getContent(), body.getContentType(), body.getCharset()); } public void setBody( String content, String contentType, String charset) { if (_parts != null) { throw new IllegalArgumentException( "Body cannot be set because a part has already been added"); } _body = new Body(content, contentType, charset); } public void setCookies(Cookie[] cookies) { _cookies = cookies; } public void setDelete(boolean delete) { if (delete) { _method = Method.DELETE; } else { _method = Method.GET; } } public void setFileParts(List<FilePart> fileParts) { _fileParts = fileParts; } public void setFollowRedirects(boolean followRedirects) { _followRedirects = followRedirects; } public void setHead(boolean head) { if (head) { _method = Method.HEAD; } else { _method = Method.GET; } } public void setHeaders(Map<String, String> headers) { _headers = headers; } public void setLocation(String location) { _location = location; } public void setParts(Map<String, String> parts) { _parts = parts; } public void setPost(boolean post) { if (post) { _method = Method.POST; } else { _method = Method.GET; } } public void setPut(boolean put) { if (put) { _method = Method.PUT; } else { _method = Method.GET; } } public void setResponse(Response response) { _response = response; } public void setTimeout(int timeout) { _timeout = timeout; } private Auth _auth; private Body _body; private Cookie[] _cookies; private List<FilePart> _fileParts; private boolean _followRedirects = true; private Map<String, String> _headers; private String _location; private Method _method = Method.GET; private Map<String, String> _parts; private Response _response = new Response(); private int _timeout; } public class Response { public void addHeader(String name, String value) { if (_headers == null) { _headers = new HashMap<>(); } _headers.put(StringUtil.toLowerCase(name), value); } public int getContentLength() { return _contentLength; } public long getContentLengthLong() { return _contentLengthLong; } public String getContentType() { return _contentType; } public String getHeader(String name) { if (_headers == null) { return null; } else { return _headers.get(StringUtil.toLowerCase(name)); } } public Map<String, String> getHeaders() { return _headers; } public String getRedirect() { return _redirect; } public int getResponseCode() { return _responseCode; } public void setContentLength(int contentLength) { _contentLength = contentLength; } public void setContentLengthLong(long contentLengthLong) { _contentLengthLong = contentLengthLong; } public void setContentType(String contentType) { _contentType = contentType; } public void setHeaders(Map<String, String> headers) { _headers = headers; } public void setRedirect(String redirect) { _redirect = redirect; } public void setResponseCode(int responseCode) { _responseCode = responseCode; } private int _contentLength = -1; private long _contentLengthLong = -1; private String _contentType; private Map<String, String> _headers; private String _redirect; private int _responseCode = -1; } }