Java tutorial
/* * Copyright 2013 the original author or authors. * * Licensed 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 com.metratech.metanga.api.impl; import java.net.InetSocketAddress; import java.net.Proxy; import java.util.Properties; import org.apache.http.HttpHost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.conn.params.ConnRoutePNames; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.HttpProtocolParams; import org.springframework.http.client.BufferingClientHttpRequestFactory; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.util.ClassUtils; /** * <i>Forked from spring-social</i><br/> * Chooses a request factory. Picks a HttpComponentsClientRequestFactory factory if Apache HttpComponents HttpClient is in the classpath. * If not, falls back to SimpleClientHttpRequestFactory. * @author Craig Walls * @author Roy Clarkson */ public class ClientHttpRequestFactorySelector { public static ClientHttpRequestFactory test() { return new HttpComponentsClientHttpRequestFactory(); } public static ClientHttpRequestFactory getRequestFactory() { Properties properties = System.getProperties(); String proxyHost = properties.getProperty("http.proxyHost"); int proxyPort = properties.containsKey("http.proxyPort") ? Integer.valueOf(properties.getProperty("http.proxyPort")) : 80; if (HTTP_COMPONENTS_AVAILABLE) { return HttpComponentsClientRequestFactoryCreator.createRequestFactory(proxyHost, proxyPort); } else { SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); if (proxyHost != null) { requestFactory.setProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort))); } return requestFactory; } } /** * Decorates a request factory to buffer responses so that the responses may be repeatedly read. * @param requestFactory the request factory to be decorated for buffering * @return a buffering request factory */ public static ClientHttpRequestFactory bufferRequests(ClientHttpRequestFactory requestFactory) { return new BufferingClientHttpRequestFactory(requestFactory); } private static final boolean HTTP_COMPONENTS_AVAILABLE = ClassUtils .isPresent("org.apache.http.client.HttpClient", ClientHttpRequestFactory.class.getClassLoader()); public static class HttpComponentsClientRequestFactoryCreator { public static ClientHttpRequestFactory createRequestFactory(String proxyHost, int proxyPort) { HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory() { @Override protected void postProcessHttpRequest(HttpUriRequest request) { HttpProtocolParams.setUseExpectContinue(request.getParams(), false); } }; if (proxyHost != null) { DefaultHttpClient httpClient = new DefaultHttpClient(); HttpHost proxy = new HttpHost(proxyHost, proxyPort); httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy); requestFactory.setHttpClient(httpClient); } return requestFactory; } } }