我正在使用 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);
}
}
最佳答案
ZmK 的答案只是 Jetty 存储库中示例的副本,甚至不起作用。
Jetty 默认没有 HTTPS 代理。 AsyncProxyServlet 和 ProxyServlet 类只做 HTTP 代理。为了让您做一个 HTTPS 代理,请执行以下操作:
- 创建一个从 AsyncProxyServlet 类扩展的类。
- 重写 createHttpClient() 方法。这里的关键是您将创建的 HttpClient 实例将需要一个 SslContextFactory()。只需在 HttpClient 对象上使用适当的设置来设置 SslContextFactory,您就可以开始了。
下面是详细的代码示例: https://github.com/k2k2e6/jettyHttpsProxy
关于ssl - 支持 SSL 的 Jetty ProxyServlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852056/