2011-05-09 12:03:58 +02:00
|
|
|
/**
|
|
|
|
|
* Copyright (c) 2010, Sebastian Sdorra
|
|
|
|
|
* All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
|
* modification, are permitted provided that the following conditions are met:
|
|
|
|
|
*
|
|
|
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
|
|
|
* this list of conditions and the following disclaimer.
|
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
|
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
|
|
|
* and/or other materials provided with the distribution.
|
|
|
|
|
* 3. Neither the name of SCM-Manager; nor the names of its
|
|
|
|
|
* contributors may be used to endorse or promote products derived from this
|
|
|
|
|
* software without specific prior written permission.
|
|
|
|
|
*
|
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
|
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
|
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
|
|
|
|
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
|
|
|
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
*
|
|
|
|
|
* http://bitbucket.org/sdorra/scm-manager
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package sonia.scm.net;
|
|
|
|
|
|
|
|
|
|
//~--- non-JDK imports --------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
import com.google.inject.Inject;
|
|
|
|
|
|
2011-05-09 12:49:00 +02:00
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
2011-05-26 17:34:17 +02:00
|
|
|
import sonia.scm.SCMContextProvider;
|
2011-05-09 12:03:58 +02:00
|
|
|
import sonia.scm.config.ScmConfiguration;
|
2011-05-26 17:47:28 +02:00
|
|
|
import sonia.scm.util.IOUtil;
|
2011-05-09 12:03:58 +02:00
|
|
|
import sonia.scm.util.Util;
|
|
|
|
|
|
|
|
|
|
//~--- JDK imports ------------------------------------------------------------
|
|
|
|
|
|
2011-09-03 17:42:21 +02:00
|
|
|
import com.sun.jersey.core.util.Base64;
|
|
|
|
|
|
2011-05-09 12:03:58 +02:00
|
|
|
import java.io.IOException;
|
2011-05-26 17:47:28 +02:00
|
|
|
import java.io.OutputStreamWriter;
|
2011-05-09 12:03:58 +02:00
|
|
|
|
2011-05-26 17:47:28 +02:00
|
|
|
import java.net.HttpURLConnection;
|
2011-05-09 12:03:58 +02:00
|
|
|
import java.net.InetSocketAddress;
|
|
|
|
|
import java.net.Proxy;
|
|
|
|
|
import java.net.SocketAddress;
|
|
|
|
|
import java.net.URL;
|
|
|
|
|
import java.net.URLConnection;
|
|
|
|
|
import java.net.URLEncoder;
|
|
|
|
|
|
2011-05-26 17:47:28 +02:00
|
|
|
import java.util.Iterator;
|
2011-05-09 12:03:58 +02:00
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
2012-06-04 13:59:52 +02:00
|
|
|
import javax.net.ssl.HttpsURLConnection;
|
|
|
|
|
import javax.net.ssl.SSLContext;
|
|
|
|
|
import javax.net.ssl.TrustManager;
|
|
|
|
|
|
2011-05-09 12:03:58 +02:00
|
|
|
/**
|
|
|
|
|
*
|
|
|
|
|
* @author Sebastian Sdorra
|
|
|
|
|
*/
|
|
|
|
|
public class URLHttpClient implements HttpClient
|
|
|
|
|
{
|
|
|
|
|
|
2011-09-03 17:42:21 +02:00
|
|
|
/** Field description */
|
|
|
|
|
public static final String CREDENTIAL_SEPARATOR = ":";
|
|
|
|
|
|
2011-05-09 12:03:58 +02:00
|
|
|
/** Field description */
|
|
|
|
|
public static final String ENCODING = "UTF-8";
|
|
|
|
|
|
2011-05-26 20:56:36 +02:00
|
|
|
/** Field description */
|
|
|
|
|
public static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";
|
|
|
|
|
|
|
|
|
|
/** Field description */
|
|
|
|
|
public static final String HEADER_ACCEPT_ENCODING_VALUE = "gzip";
|
|
|
|
|
|
2011-11-24 17:58:54 +01:00
|
|
|
/** Field description */
|
|
|
|
|
public static final String HEADER_AUTHORIZATION = "Authorization";
|
|
|
|
|
|
2011-09-03 17:42:21 +02:00
|
|
|
/** Field description */
|
|
|
|
|
public static final String HEADER_PROXY_AUTHORIZATION = "Proxy-Authorization";
|
|
|
|
|
|
2011-05-26 17:34:17 +02:00
|
|
|
/** Field description */
|
|
|
|
|
public static final String HEADER_USERAGENT = "User-Agent";
|
|
|
|
|
|
|
|
|
|
/** Field description */
|
|
|
|
|
public static final String HEADER_USERAGENT_VALUE = "SCM-Manager ";
|
|
|
|
|
|
2011-05-26 17:47:28 +02:00
|
|
|
/** Field description */
|
|
|
|
|
public static final String METHOD_POST = "POST";
|
|
|
|
|
|
2011-09-03 17:42:21 +02:00
|
|
|
/** Field description */
|
|
|
|
|
public static final String PREFIX_BASIC_AUTHENTICATION = "Basic ";
|
|
|
|
|
|
2011-05-26 21:03:48 +02:00
|
|
|
/** Field description */
|
|
|
|
|
public static final int TIMEOUT_CONNECTION = 30000;
|
|
|
|
|
|
|
|
|
|
/** Field description */
|
|
|
|
|
public static final int TIMEOUT_RAED = 1200000;
|
|
|
|
|
|
2011-05-09 12:49:00 +02:00
|
|
|
/** the logger for URLHttpClient */
|
|
|
|
|
private static final Logger logger =
|
|
|
|
|
LoggerFactory.getLogger(URLHttpClient.class);
|
|
|
|
|
|
2011-05-09 12:03:58 +02:00
|
|
|
//~--- constructors ---------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Constructs ...
|
|
|
|
|
*
|
|
|
|
|
*
|
2011-05-26 17:34:17 +02:00
|
|
|
*
|
|
|
|
|
* @param context
|
2011-05-09 12:03:58 +02:00
|
|
|
* @param configuration
|
|
|
|
|
*/
|
|
|
|
|
@Inject
|
2011-05-26 17:34:17 +02:00
|
|
|
public URLHttpClient(SCMContextProvider context,
|
|
|
|
|
ScmConfiguration configuration)
|
2011-05-09 12:03:58 +02:00
|
|
|
{
|
2011-05-26 17:34:17 +02:00
|
|
|
this.context = context;
|
2011-05-09 12:03:58 +02:00
|
|
|
this.configuration = configuration;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//~--- methods --------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param url
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public HttpResponse post(String url) throws IOException
|
|
|
|
|
{
|
2011-11-24 17:58:54 +01:00
|
|
|
HttpURLConnection connection = (HttpURLConnection) openConnection(null,
|
|
|
|
|
url);
|
2011-05-26 17:47:28 +02:00
|
|
|
|
|
|
|
|
connection.setRequestMethod(METHOD_POST);
|
|
|
|
|
|
|
|
|
|
return new URLHttpResponse(connection);
|
2011-05-09 12:03:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param url
|
|
|
|
|
* @param parameters
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public HttpResponse post(String url, Map<String, List<String>> parameters)
|
|
|
|
|
throws IOException
|
|
|
|
|
{
|
2011-11-24 17:58:54 +01:00
|
|
|
HttpURLConnection connection = (HttpURLConnection) openConnection(null,
|
|
|
|
|
url);
|
|
|
|
|
|
|
|
|
|
connection.setRequestMethod(METHOD_POST);
|
|
|
|
|
appendPostParameter(connection, parameters);
|
|
|
|
|
|
|
|
|
|
return new URLHttpResponse(connection);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param request
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public HttpResponse post(HttpRequest request) throws IOException
|
|
|
|
|
{
|
|
|
|
|
HttpURLConnection connection = (HttpURLConnection) openConnection(request,
|
|
|
|
|
request.getUrl());
|
2011-05-26 17:47:28 +02:00
|
|
|
|
|
|
|
|
connection.setRequestMethod(METHOD_POST);
|
2011-11-24 17:58:54 +01:00
|
|
|
appendPostParameter(connection, request.getParameters());
|
|
|
|
|
|
|
|
|
|
return new URLHttpResponse(connection);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//~--- get methods ----------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param spec
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public HttpResponse get(String spec) throws IOException
|
|
|
|
|
{
|
|
|
|
|
return new URLHttpResponse(openConnection(null, spec));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param url
|
|
|
|
|
* @param parameters
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public HttpResponse get(String url, Map<String, List<String>> parameters)
|
|
|
|
|
throws IOException
|
|
|
|
|
{
|
|
|
|
|
url = createGetUrl(url, parameters);
|
|
|
|
|
|
|
|
|
|
return new URLHttpResponse(openConnection(null, url));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param request
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public HttpResponse get(HttpRequest request) throws IOException
|
|
|
|
|
{
|
|
|
|
|
String url = createGetUrl(request.getUrl(), request.getParameters());
|
|
|
|
|
|
2012-04-05 16:49:42 +02:00
|
|
|
return new URLHttpResponse(openConnection(request, url),
|
|
|
|
|
request.isDecodeGZip());
|
2011-11-24 17:58:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//~--- methods --------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param connection
|
|
|
|
|
* @param header
|
|
|
|
|
* @param username
|
|
|
|
|
* @param password
|
|
|
|
|
*/
|
|
|
|
|
private void appendBasicAuthHeader(HttpURLConnection connection,
|
|
|
|
|
String header, String username,
|
|
|
|
|
String password)
|
|
|
|
|
{
|
|
|
|
|
if (Util.isNotEmpty(username) || Util.isNotEmpty(password))
|
|
|
|
|
{
|
|
|
|
|
username = Util.nonNull(username);
|
|
|
|
|
password = Util.nonNull(password);
|
|
|
|
|
|
|
|
|
|
if (logger.isDebugEnabled())
|
|
|
|
|
{
|
|
|
|
|
logger.debug("append {} header for user {}", header, username);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String auth = username.concat(CREDENTIAL_SEPARATOR).concat(password);
|
|
|
|
|
|
|
|
|
|
auth = new String(Base64.encode(auth.getBytes()));
|
|
|
|
|
connection.addRequestProperty(header,
|
|
|
|
|
PREFIX_BASIC_AUTHENTICATION.concat(auth));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param headers
|
|
|
|
|
* @param connection
|
|
|
|
|
*/
|
|
|
|
|
private void appendHeaders(Map<String, List<String>> headers,
|
|
|
|
|
URLConnection connection)
|
|
|
|
|
{
|
|
|
|
|
if (Util.isNotEmpty(headers))
|
|
|
|
|
{
|
|
|
|
|
for (Map.Entry<String, List<String>> e : headers.entrySet())
|
|
|
|
|
{
|
|
|
|
|
String name = e.getKey();
|
|
|
|
|
List<String> values = e.getValue();
|
2011-05-26 17:47:28 +02:00
|
|
|
|
2011-11-24 17:58:54 +01:00
|
|
|
if (Util.isNotEmpty(name) && Util.isNotEmpty(values))
|
|
|
|
|
{
|
|
|
|
|
for (String value : values)
|
|
|
|
|
{
|
|
|
|
|
if (logger.isTraceEnabled())
|
|
|
|
|
{
|
|
|
|
|
logger.trace("append header {}:{}", name, value);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
connection.setRequestProperty(name, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (logger.isWarnEnabled())
|
|
|
|
|
{
|
|
|
|
|
logger.warn("value of {} header is empty", name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (logger.isTraceEnabled())
|
|
|
|
|
{
|
|
|
|
|
logger.trace("header map is emtpy");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param connection
|
|
|
|
|
* @param parameters
|
|
|
|
|
*
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
private void appendPostParameter(HttpURLConnection connection,
|
|
|
|
|
Map<String, List<String>> parameters)
|
|
|
|
|
throws IOException
|
|
|
|
|
{
|
2011-05-26 17:47:28 +02:00
|
|
|
if (Util.isNotEmpty(parameters))
|
|
|
|
|
{
|
|
|
|
|
connection.setDoOutput(true);
|
|
|
|
|
|
|
|
|
|
OutputStreamWriter writer = null;
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
writer = new OutputStreamWriter(connection.getOutputStream());
|
|
|
|
|
|
|
|
|
|
Iterator<Map.Entry<String, List<String>>> it =
|
|
|
|
|
parameters.entrySet().iterator();
|
|
|
|
|
|
|
|
|
|
while (it.hasNext())
|
|
|
|
|
{
|
|
|
|
|
Map.Entry<String, List<String>> p = it.next();
|
|
|
|
|
List<String> values = p.getValue();
|
|
|
|
|
|
|
|
|
|
if (Util.isNotEmpty(values))
|
|
|
|
|
{
|
|
|
|
|
String key = encode(p.getKey());
|
|
|
|
|
|
|
|
|
|
for (String value : values)
|
|
|
|
|
{
|
|
|
|
|
writer.append(key).append("=").append(encode(value));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (it.hasNext())
|
|
|
|
|
{
|
|
|
|
|
writer.write("&");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
IOUtil.close(writer);
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-05-09 12:03:58 +02:00
|
|
|
}
|
|
|
|
|
|
2012-06-04 13:59:52 +02:00
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param request
|
|
|
|
|
* @param connection
|
|
|
|
|
*/
|
|
|
|
|
private void applySSLSettings(HttpRequest request,
|
|
|
|
|
HttpsURLConnection connection)
|
|
|
|
|
{
|
|
|
|
|
if (request.isDisableCertificateValidation())
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
TrustManager[] trustAllCerts = new TrustManager[] {
|
|
|
|
|
new TrustAllTrustManager() };
|
|
|
|
|
SSLContext sc = SSLContext.getInstance("SSL");
|
|
|
|
|
|
|
|
|
|
sc.init(null, trustAllCerts, new java.security.SecureRandom());
|
|
|
|
|
connection.setSSLSocketFactory(sc.getSocketFactory());
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
logger.error("could not disable certificate validation", ex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (request.isDisableHostnameValidation())
|
|
|
|
|
{
|
|
|
|
|
connection.setHostnameVerifier(new TrustAllHostnameVerifier());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-05-09 12:03:58 +02:00
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param url
|
|
|
|
|
* @param parameters
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
2011-11-24 17:58:54 +01:00
|
|
|
private String createGetUrl(String url, Map<String, List<String>> parameters)
|
2011-05-09 12:03:58 +02:00
|
|
|
{
|
|
|
|
|
if (Util.isNotEmpty(parameters))
|
|
|
|
|
{
|
|
|
|
|
StringBuilder ub = new StringBuilder(url);
|
|
|
|
|
boolean first = url.contains("?");
|
|
|
|
|
|
|
|
|
|
for (Map.Entry<String, List<String>> p : parameters.entrySet())
|
|
|
|
|
{
|
|
|
|
|
String key = encode(p.getKey());
|
|
|
|
|
List<String> values = p.getValue();
|
|
|
|
|
|
|
|
|
|
if (Util.isNotEmpty(values))
|
|
|
|
|
{
|
|
|
|
|
for (String value : values)
|
|
|
|
|
{
|
|
|
|
|
if (first)
|
|
|
|
|
{
|
|
|
|
|
ub.append("?");
|
|
|
|
|
first = false;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ub.append("&");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ub.append(key).append("=").append(encode(value));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
url = ub.toString();
|
|
|
|
|
}
|
|
|
|
|
|
2011-11-24 17:58:54 +01:00
|
|
|
return url;
|
2011-05-09 12:03:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* @param param
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private String encode(String param)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
param = URLEncoder.encode(param, ENCODING);
|
|
|
|
|
}
|
|
|
|
|
catch (IOException ex)
|
|
|
|
|
{
|
|
|
|
|
throw new RuntimeException(ex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return param;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
2011-11-24 17:58:54 +01:00
|
|
|
*
|
|
|
|
|
* @param request
|
2011-05-09 12:03:58 +02:00
|
|
|
* @param spec
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
2011-11-24 17:58:54 +01:00
|
|
|
private HttpURLConnection openConnection(HttpRequest request, String spec)
|
|
|
|
|
throws IOException
|
2011-05-09 12:03:58 +02:00
|
|
|
{
|
2011-11-24 17:58:54 +01:00
|
|
|
return openConnection(request, new URL(spec));
|
2011-05-09 12:03:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Method description
|
|
|
|
|
*
|
|
|
|
|
*
|
2011-11-24 17:58:54 +01:00
|
|
|
*
|
|
|
|
|
* @param request
|
2011-05-09 12:03:58 +02:00
|
|
|
* @param url
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
2011-11-24 17:58:54 +01:00
|
|
|
private HttpURLConnection openConnection(HttpRequest request, URL url)
|
|
|
|
|
throws IOException
|
2011-05-09 12:03:58 +02:00
|
|
|
{
|
2011-11-24 17:58:54 +01:00
|
|
|
HttpURLConnection connection = null;
|
2011-05-09 12:03:58 +02:00
|
|
|
|
|
|
|
|
if (configuration.isEnableProxy())
|
|
|
|
|
{
|
2011-05-09 12:49:00 +02:00
|
|
|
if (logger.isDebugEnabled())
|
|
|
|
|
{
|
|
|
|
|
logger.debug("fetch '{}' using proxy {}:{}",
|
|
|
|
|
new Object[] { url.toExternalForm(),
|
|
|
|
|
configuration.getProxyServer(),
|
|
|
|
|
configuration.getProxyPort() });
|
|
|
|
|
}
|
|
|
|
|
|
2011-05-09 12:03:58 +02:00
|
|
|
SocketAddress address =
|
|
|
|
|
new InetSocketAddress(configuration.getProxyServer(),
|
|
|
|
|
configuration.getProxyPort());
|
|
|
|
|
|
2011-11-24 17:58:54 +01:00
|
|
|
connection =
|
|
|
|
|
(HttpURLConnection) url.openConnection(new Proxy(Proxy.Type.HTTP,
|
|
|
|
|
address));
|
2011-05-09 12:03:58 +02:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2011-05-09 12:49:00 +02:00
|
|
|
if (logger.isDebugEnabled())
|
|
|
|
|
{
|
2011-05-09 13:24:30 +02:00
|
|
|
logger.debug("fetch '{}'", url.toExternalForm());
|
2011-05-09 12:49:00 +02:00
|
|
|
}
|
|
|
|
|
|
2011-11-24 17:58:54 +01:00
|
|
|
connection = (HttpURLConnection) url.openConnection();
|
2011-05-09 12:03:58 +02:00
|
|
|
}
|
|
|
|
|
|
2012-06-04 13:59:52 +02:00
|
|
|
if (connection instanceof HttpsURLConnection)
|
|
|
|
|
{
|
|
|
|
|
applySSLSettings(request, (HttpsURLConnection) connection);
|
|
|
|
|
}
|
|
|
|
|
|
2011-05-26 21:03:48 +02:00
|
|
|
connection.setReadTimeout(TIMEOUT_RAED);
|
|
|
|
|
connection.setConnectTimeout(TIMEOUT_CONNECTION);
|
2011-11-24 17:58:54 +01:00
|
|
|
|
|
|
|
|
if (request != null)
|
|
|
|
|
{
|
|
|
|
|
Map<String, List<String>> headers = request.getHeaders();
|
|
|
|
|
|
|
|
|
|
appendHeaders(headers, connection);
|
|
|
|
|
|
|
|
|
|
String username = request.getUsername();
|
|
|
|
|
String password = request.getPassword();
|
|
|
|
|
|
|
|
|
|
appendBasicAuthHeader(connection, HEADER_AUTHORIZATION, username,
|
|
|
|
|
password);
|
|
|
|
|
}
|
|
|
|
|
|
2011-05-26 20:56:36 +02:00
|
|
|
connection.setRequestProperty(HEADER_ACCEPT_ENCODING,
|
|
|
|
|
HEADER_ACCEPT_ENCODING_VALUE);
|
2011-05-26 17:34:54 +02:00
|
|
|
connection.setRequestProperty(
|
|
|
|
|
HEADER_USERAGENT, HEADER_USERAGENT_VALUE.concat(context.getVersion()));
|
2011-05-26 17:34:17 +02:00
|
|
|
|
2011-09-03 17:42:21 +02:00
|
|
|
String username = configuration.getProxyUser();
|
|
|
|
|
String password = configuration.getProxyPassword();
|
|
|
|
|
|
2011-11-24 17:58:54 +01:00
|
|
|
appendBasicAuthHeader(connection, HEADER_PROXY_AUTHORIZATION, username,
|
|
|
|
|
password);
|
2011-09-03 17:42:21 +02:00
|
|
|
|
2011-05-09 12:03:58 +02:00
|
|
|
return connection;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//~--- fields ---------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
/** Field description */
|
|
|
|
|
private ScmConfiguration configuration;
|
2011-05-26 17:34:17 +02:00
|
|
|
|
|
|
|
|
/** Field description */
|
|
|
|
|
private SCMContextProvider context;
|
2011-05-09 12:03:58 +02:00
|
|
|
}
|