diff --git a/source/net/yacy/http/ProxyCacheHandler.java b/source/net/yacy/http/ProxyCacheHandler.java index 5a369c545..5120b48a8 100644 --- a/source/net/yacy/http/ProxyCacheHandler.java +++ b/source/net/yacy/http/ProxyCacheHandler.java @@ -65,7 +65,7 @@ public class ProxyCacheHandler extends AbstractRemoteHandler implements Handler ResponseHeader cachedResponseHeader = Cache.getResponseHeader(url.hash()); if (cachedResponseHeader != null) { - RequestHeader proxyHeaders = YaCyDefaultServlet.convertHeaderFromJetty(request); + RequestHeader proxyHeaders = ProxyHandler.convertHeaderFromJetty(request); // TODO: this convertion is only necessary final net.yacy.crawler.retrieval.Request yacyRequest = new net.yacy.crawler.retrieval.Request( null, diff --git a/source/net/yacy/http/ProxyHandler.java b/source/net/yacy/http/ProxyHandler.java index 3b48f187b..7dcfc438b 100644 --- a/source/net/yacy/http/ProxyHandler.java +++ b/source/net/yacy/http/ProxyHandler.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.io.OutputStream; import java.net.SocketException; import java.util.Date; +import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -43,10 +44,9 @@ import net.yacy.cora.protocol.HeaderFramework; import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.protocol.ResponseHeader; import net.yacy.cora.protocol.http.HTTPClient; -import net.yacy.document.TextParser; import net.yacy.crawler.data.Cache; import net.yacy.crawler.retrieval.Response; -import net.yacy.http.servlets.YaCyDefaultServlet; +import net.yacy.document.TextParser; import net.yacy.server.http.HTTPDProxyHandler; import net.yacy.server.http.MultiOutputStream; @@ -129,7 +129,7 @@ public class ProxyHandler extends AbstractRemoteHandler implements Handler { sb.proxyLastAccess = System.currentTimeMillis(); - RequestHeader proxyHeaders = YaCyDefaultServlet.convertHeaderFromJetty(request); + RequestHeader proxyHeaders = ProxyHandler.convertHeaderFromJetty(request); setProxyHeaderForClient(request, proxyHeaders); final HTTPClient client = new HTTPClient(ClientIdentification.yacyProxyAgent); @@ -227,7 +227,27 @@ public class ProxyHandler extends AbstractRemoteHandler implements Handler { logProxyAccess(request); baseRequest.setHandled(true); } - + + /** + * Convert ServletRequest header to modifiable YaCy RequestHeader + * + * @param request ServletRequest + * @return RequestHeader created from ServletRequest + */ + public static RequestHeader convertHeaderFromJetty(HttpServletRequest request) { + RequestHeader result = new RequestHeader(); + Enumeration headerNames = request.getHeaderNames(); + while (headerNames.hasMoreElements()) { + String headerName = headerNames.nextElement(); + Enumeration headers = request.getHeaders(headerName); + while (headers.hasMoreElements()) { + String header = headers.nextElement(); + result.add(headerName, header); + } + } + return result; + } + /** * adds specific header elements for the connection of the internal * httpclient to the remote server according to local config diff --git a/source/net/yacy/http/servlets/UrlProxyServlet.java b/source/net/yacy/http/servlets/UrlProxyServlet.java index bdddc4002..451a63a83 100644 --- a/source/net/yacy/http/servlets/UrlProxyServlet.java +++ b/source/net/yacy/http/servlets/UrlProxyServlet.java @@ -26,6 +26,7 @@ import net.yacy.cora.protocol.HeaderFramework; import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.protocol.ResponseHeader; import net.yacy.cora.util.ConcurrentLog; +import net.yacy.http.ProxyHandler; import net.yacy.kelondro.util.FileUtils; import net.yacy.search.Switchboard; import net.yacy.server.http.ChunkedInputStream; @@ -144,7 +145,7 @@ public class UrlProxyServlet extends HttpServlet implements Servlet { hostwithport += ":" + proxyurl.getPort(); } // 4 - get target url - RequestHeader yacyRequestHeader = YaCyDefaultServlet.convertHeaderFromJetty(request); + RequestHeader yacyRequestHeader = ProxyHandler.convertHeaderFromJetty(request); yacyRequestHeader.remove(RequestHeader.KEEP_ALIVE); yacyRequestHeader.remove(HeaderFramework.CONTENT_LENGTH); diff --git a/source/net/yacy/http/servlets/YaCyDefaultServlet.java b/source/net/yacy/http/servlets/YaCyDefaultServlet.java index cf2aa2b39..364d48865 100644 --- a/source/net/yacy/http/servlets/YaCyDefaultServlet.java +++ b/source/net/yacy/http/servlets/YaCyDefaultServlet.java @@ -675,27 +675,6 @@ public class YaCyDefaultServlet extends HttpServlet { protected Object invokeServlet(final File targetClass, final RequestHeader request, final serverObjects args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { return rewriteMethod(targetClass).invoke(null, new Object[]{request, args, Switchboard.getSwitchboard()}); // add switchboard } - - /** - * Convert ServletRequest header to YaCy RequestHeader - * @param request ServletRequest - * @return RequestHeader created from ServletRequest - * @deprecated use RequestHeader(HttpServletRequest); but .remove(key) can't be used after switch to new instance - */ - @Deprecated // TODO: only used for proxy, should be handled there - public static RequestHeader convertHeaderFromJetty(HttpServletRequest request) { - RequestHeader result = new RequestHeader(); - Enumeration headerNames = request.getHeaderNames(); - while (headerNames.hasMoreElements()) { - String headerName = headerNames.nextElement(); - Enumeration headers = request.getHeaders(headerName); - while (headers.hasMoreElements()) { - String header = headers.nextElement(); - result.add(headerName, header); - } - } - return result; - } /** * Returns the URL base for this peer, determined from request HTTP header "Host" when present. Use this when absolute URL rendering is required, diff --git a/source/net/yacy/http/servlets/YaCyProxyServlet.java b/source/net/yacy/http/servlets/YaCyProxyServlet.java index 7591a15b2..d6ed0014f 100644 --- a/source/net/yacy/http/servlets/YaCyProxyServlet.java +++ b/source/net/yacy/http/servlets/YaCyProxyServlet.java @@ -31,6 +31,7 @@ import net.yacy.cora.protocol.HeaderFramework; import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.protocol.ResponseHeader; import net.yacy.cora.util.ConcurrentLog; +import net.yacy.http.ProxyHandler; import net.yacy.kelondro.util.FileUtils; import net.yacy.search.Switchboard; import net.yacy.server.http.ChunkedInputStream; @@ -116,7 +117,7 @@ public class YaCyProxyServlet extends HttpServlet implements Servlet { if (proxyurl.getPort() != -1) { hostwithport += ":" + proxyurl.getPort(); } - RequestHeader yacyRequestHeader = YaCyDefaultServlet.convertHeaderFromJetty(request); + RequestHeader yacyRequestHeader = ProxyHandler.convertHeaderFromJetty(request); yacyRequestHeader.remove(RequestHeader.KEEP_ALIVE); yacyRequestHeader.remove(HeaderFramework.CONTENT_LENGTH);