我使用Jetty的ProxyServlet作为HTTP代理.
启动服务器并在firefox中添加socks代理后,我可以通过代理访问网站,没有任何问题.
问题是当我尝试通过代理访问HTTPs网站时.Firefox显示"未找到服务器"错误,在调试期间,我看不到我的Java代码中发生的任何事情.
我在这里错过了一些东西来为Jetty添加SSL支持吗?
这是代码的一部分:
Server httpProxy = new Server(8087);
ServletHandler servletHandler = new ServletHandler();
servletHandler.addServletWithMapping(new ServletHolder(new TunnelProxyServlet()), "/*");
httpProxy.setHandler(servletHandler);
try {
httpProxy.start();
} catch (Exception ex) {
Logger.getLogger(HttpProxy.class.getName()).log(Level.SEVERE, null, ex);
}
public class TunnelProxyServlet extends ProxyServlet {
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
System.out.println("init done !");
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("got a request !");
super.service(req, res);
}
}
Run Code Online (Sandbox Code Playgroud)
k2k*_*2e6 12
ZmK的答案只是Jetty存储库中的示例副本,甚至不起作用.
Jetty默认情况下没有HTTPS代理.AsyncProxyServlet和ProxyServlet类仅执行HTTP代理.要使用HTTPS代理,请执行以下操作:
以下是详细的代码示例:https: //github.com/k2k2e6/jettyHttpsProxy
小智 5
我当前正在使用最新版本的Jetty(9.4.1),通过将HTTPS代理添加到我的Proxy Servlet中就可以使它工作:
@Override
protected HttpClient newHttpClient() {
return new HttpClient(new SslContextFactory());
}
Run Code Online (Sandbox Code Playgroud)
值得一提的是我认识到k2k2e6的示例,然后我才可以覆盖此简单方法,而不是整个createHttpClient()方法。
小智 4
你可以使用"ConnectHandler"
public class ProxyServer {
public static void main(String[] args) throws Exception {
Server server = new Server();
SelectChannelConnector connector = new SelectChannelConnector();
connector.setPort(8888);
server.addConnector(connector);
HandlerCollection handlers = new HandlerCollection();
server.setHandler(handlers);
// Setup proxy servlet
ServletContextHandler context = new ServletContextHandler(handlers, "/", ServletContextHandler.SESSIONS);
ServletHolder proxyServlet = new ServletHolder(ProxyServlet.class);
proxyServlet.setInitParameter("whiteList", "google.com, www.eclipse.org, localhost");
proxyServlet.setInitParameter("blackList", "google.com/calendar/*, www.eclipse.org/committers/");
context.addServlet(proxyServlet, "/*");
// Setup proxy handler to handle CONNECT methods
ConnectHandler proxy = new ConnectHandler();
proxy.setWhite(new String[]{"mail.google.com"});
proxy.addWhite("www.google.com");
handlers.addHandler(proxy);
server.start();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10031 次 |
最近记录: |