Создать обратный прокси с помощью littleproxy
Я начинающий с littleproxy
Как я могу создать обратный прокси-сервер?
Мой прокси-сервер получает запросы от клиентов и отправляет их на серверы (серверы только на обычном сайте, таком как www.xxx.com, содержат только веб-страницу (не остальные), а прокси-сервер получает ответ от сервера (веб-страницы) и возвращает клиенту.
Например, URL клиента localhost:8080/x
, прокси отображает это на www.myserver.com/xy
и показывает xy
страница для клиента. Как это можно сделать с помощью фильтра или httpservlet.
Мой http сервлет будет следующим:
public class ProxyFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpProxyServer server =
DefaultHttpProxyServer.bootstrap()
.withPort(8080)
.withFiltersSource(new HttpFiltersSourceAdapter() {
public HttpFilters filterRequest(HttpRequest originalRequest, ChannelHandlerContext ctx) {
return new HttpFiltersAdapter(originalRequest) {
@Override
public HttpResponse clientToProxyRequest(HttpObject httpObject) {
// TODO: implement your filtering here ????
return null;
}
@Override
public HttpResponse proxyToServerRequest(HttpObject httpObject) {
// TODO: implement your filtering here ????
return null;
}
@Override
public HttpObject serverToProxyResponse(HttpObject httpObject) {
// TODO: implement your filtering here ????
return httpObject;
}
@Override
public HttpObject proxyToClientResponse(HttpObject httpObject) {
// TODO: implement your filtering here ????
return httpObject;
}
};
}
})
.start();
}
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
}
1 ответ
Решение
LittleProxy использует Host
заголовок для маршрутизации. Самое простое, что вы можете сделать, это установить Host
в качестве реального сервера в clientToProxyRequest
метод.
public HttpResponse clientToProxyRequest (HttpObject httpObject) { if (httpObject instanceof FullHttpRequest) { FullHttpRequest httpRequest = (FullHttpRequest) httpObject;. HttpRequest.headers () удалить ("хост"); httpRequest.headers().add("Host", "myserver.com:8080"); } вернуть ноль; }