我已经有一个工作正常的HTTP代理服务器,可以处理多个HTTP请求。现在我的问题是如何处理https请求?
这是我正在使用的简化代码:
class Daemon
{
public static void main(String[] args)
{
ServerSocket cDaemonSocket = new ServerSocket(3128);
while(true)
{
try
{
Socket ClientSocket = cDaemonSocket.accept();
(new ClientHandler(ClientSocket )).start();
}catch(Exception e) { }
}
}
}
和ClientHandler
class ClientHandler extends Thread
{
private Socket socket = null;
private Socket remoteSocket = null;
private HTTPReqHeader request = null;
ClientHandler(Socket socket)
{
this.socket = socket;
request = new HTTPReqHeader();
request.parse(socket); // I read and parse the HTTP request here
}
public void run()
{
if(!request.isSecure() )
{
remoteSocket = new Socket(request.url,request.port);
}
else
{
// now what should I do to established a secured socket?
}
// start connecting remoteSocket and clientSocket
...........
}
}
}
我确实确实尝试搜索过,但是遇到SSL隧道,证书,握手,SSLSocket,SSLFactory,trustStore等问题,但是仍然无法正常工作。我只需要知道我需要什么,以及建立与启用SSL的Web服务器的连接的步骤。
我终于明白了。
我只需要使用普通套接字,并向客户端发送一条消息,表明已建立连接。然后继续挖掘。
这是一个工作代码:
private Socket socket = null;
private Socket remoteSocket = null;
private HTTPReqHeader request = null;
ClientHandler(Socket socket)
{
this.socket = socket;
request = new HTTPReqHeader();
request.parse(socket); // I read and parse the HTTP request here
}
public void run()
{
remoteSocket = new Socket(request.url,request.port);
if(request.isSecure() )
{
// send ok message to client
String ConnectResponse = "HTTP/1.0 200 Connection established\n" +
"Proxy-agent: ProxyServer/1.0\n" +
"\r\n";
try
{
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeByte(ConnectResponse);
out.flush();
} catch(Exception e) {}
}
// start connecting remoteSocket and clientSocket
...........
}
这是有关代理服务器如何处理CONNECT的很好的解释。 http://curl.haxx.se/rfc/draft-luotonen-web-proxy-
tunneling-01.txt
问: Workerman如何创建一个https服务,使得客户端可以用过https协来连接通讯。 答: https协议实际是http+SSL,就是在http协议上加入SSL层。Workerman支持http协议,同时也支持SSL(需要Workerman版本>=3.3.7), 所以只需要在http协议的基础上开启SSL即可支持https协议。 Workerman开启SSL 准备工作: 1、Worker
我得到下面的错误,当做docker组成。该应用程序正在运行,但不能使任何api发布/获取请求。快速服务器正在使用端口5000。 ]尝试从localhost:3000代理请求/api/users/user时发生[HPM]错误http://localhost:5000/ (经济学)(https://nodejs.org/api/errors.html#errors_common_system_erro
问: Workerman如何创建一个https服务,使得客户端可以用过https协来连接通讯。 答: https协议实际是http+SSL,就是在http协议上加入SSL层。Workerman支持http协议,同时也支持SSL(需要Workerman版本>=3.3.7), 所以只需要在http协议的基础上开启SSL即可支持https协议。 Workerman开启SSL 准备工作: 1、Worker
问题内容: 我目前正在尝试使用pywin32创建一个win32服务。我的主要参考点是本教程: http://code.activestate.com/recipes/551780/ 我不了解的是初始化过程,因为Daemon从不直接通过Daemon()进行初始化,而是从我的理解中,它是通过以下方式进行初始化的: 其中 svc_install 通过调用守护程序处理 初始化 。 init ()并将一些参
我正在使用Jersey 2.x和内置在Jersey中的HK2。我需要在我的服务中用注释标记某些方法,也就是说,我想在这些方法调用之前和之后执行一些额外的操作。不幸的是,HK2没有任何AOP能力。我认为只要调用工厂的方法,就可以将工厂绑定到服务的接口,并创建服务的代理。然而,我需要一些东西到我的工厂工作: 1)创建代理的服务类和接口
我有最困难的时候让我的webpack开发服务器代理到我的后端。 我使用Vue和webpack cli模板。 我的后端托管在docker容器中,可以在localhost:8443/foo上看到 我的devServer配置设置为: 正如我前面所说,当我将浏览器指向https://localhost:8443/foo 当我运行我的webpack服务器,并试图https://localhost:9000/