package se.kodapan.osm.services; import org.apache.http.HttpRequest; import org.apache.http.client.HttpClient; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.http.params.BasicHttpParams; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author kalle * @since 2013-09-21 6:48 PM */ public class HttpService { private static Logger log = LoggerFactory.getLogger(HttpService.class); private long minimumMillisecondsDelayBetweenRequests = 0; private long previousRequestTimestamp = 0; private ClientConnectionManager cm; private HttpClient httpClient; private String defaultUserAgent = "Unnamed instance of " + getClass().getName() + ", https://github.com/karlwettin/osm-common/"; private String userAgent = defaultUserAgent; public void open() throws Exception { SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); cm = new ThreadSafeClientConnManager(new BasicHttpParams(), schemeRegistry); httpClient = new DefaultHttpClient(cm, new BasicHttpParams()); } public void setUserAgent(HttpRequest httpRequest) { if (defaultUserAgent.equals(userAgent)) { throw new NullPointerException("HTTP header User-Agent not set! See se.kodapan.osm.services.HttpService#setUserAgent"); } httpRequest.setHeader("User-Agent", userAgent); } public void close() throws Exception { } public void leniency() throws Exception { long sleep; while ((sleep = previousRequestTimestamp + minimumMillisecondsDelayBetweenRequests - System.currentTimeMillis()) > 0) { Thread.sleep(sleep); } previousRequestTimestamp = System.currentTimeMillis(); } public String getUserAgent() { return userAgent; } public void setUserAgent(String userAgent) { this.userAgent = userAgent; } public long getMinimumMillisecondsDelayBetweenRequests() { return minimumMillisecondsDelayBetweenRequests; } public void setMinimumMillisecondsDelayBetweenRequests(long minimumMillisecondsDelayBetweenRequests) { this.minimumMillisecondsDelayBetweenRequests = minimumMillisecondsDelayBetweenRequests; } public HttpClient getHttpClient() { return httpClient; } public void setHttpClient(HttpClient httpClient) { this.httpClient = httpClient; } }