public void HttpsServerTest() { string address = "127.0.0.1"; int port = 8443; // Create and prepare a new SSL server and client context var server_context = new SslContext(SslProtocols.Tls12, new X509Certificate2("server.pfx", "qwerty"), (sender, certificate, chain, sslPolicyErrors) => true); var client_context = new SslContext(SslProtocols.Tls12, new X509Certificate2("client.pfx", "qwerty"), (sender, certificate, chain, sslPolicyErrors) => true); // Create and start HTTPS server var server = new HttpsCacheServer(server_context, IPAddress.Any, port); Assert.True(server.Start()); while (!server.IsStarted) { Thread.Yield(); } // Create a new HTTPS client var client = new HttpsClientEx(client_context, address, port); // Test CRUD operations var response = client.SendGetRequest("/test").Result; Assert.True(response.Status == 404); response = client.SendPostRequest("/test", "old_value").Result; Assert.True(response.Status == 200); response = client.SendGetRequest("/test").Result; Assert.True(response.Status == 200); Assert.True(response.Body == "old_value"); response = client.SendPutRequest("/test", "new_value").Result; Assert.True(response.Status == 200); response = client.SendGetRequest("/test").Result; Assert.True(response.Status == 200); Assert.True(response.Body == "new_value"); response = client.SendDeleteRequest("/test").Result; Assert.True(response.Status == 200); response = client.SendGetRequest("/test").Result; Assert.True(response.Status == 404); // Stop the HTTPS server Assert.True(server.Stop()); while (server.IsStarted) { Thread.Yield(); } }
static void Main(string[] args) { // HTTPS server address string address = "127.0.0.1"; if (args.Length > 0) { address = args[0]; } // HTTPS server port int port = 8443; if (args.Length > 1) { port = int.Parse(args[1]); } Console.WriteLine($"HTTPS server address: {address}"); Console.WriteLine($"HTTPS server port: {port}"); Console.WriteLine(); // Create and prepare a new SSL client context var context = new SslContext(SslProtocols.Tls12, new X509Certificate2("client.pfx", "qwerty"), (sender, certificate, chain, sslPolicyErrors) => true); // Create a new HTTPS client var client = new HttpsClientEx(context, address, port); Console.WriteLine("Press Enter to stop the client or '!' to reconnect the client..."); // Perform text input for (;;) { string line = Console.ReadLine(); if (string.IsNullOrEmpty(line)) { break; } // Reconnect the client if (line == "!") { Console.Write("Client reconnecting..."); if (client.IsConnected) { client.ReconnectAsync(); } else { client.ConnectAsync(); } Console.WriteLine("Done!"); continue; } var commands = line.Split(' '); if (commands.Length < 2) { Console.WriteLine("HTTP method and URL must be entered!"); continue; } if (commands[0].ToUpper() == "HEAD") { var response = client.SendHeadRequest(commands[1]).Result; Console.WriteLine(response); } else if (commands[0].ToUpper() == "GET") { var response = client.SendGetRequest(commands[1]).Result; Console.WriteLine(response); } else if (commands[0].ToUpper() == "POST") { if (commands.Length < 3) { Console.WriteLine("HTTP method, URL and body must be entered!"); continue; } var response = client.SendPostRequest(commands[1], commands[2]).Result; Console.WriteLine(response); } else if (commands[0].ToUpper() == "PUT") { if (commands.Length < 3) { Console.WriteLine("HTTP method, URL and body must be entered!"); continue; } var response = client.SendPutRequest(commands[1], commands[2]).Result; Console.WriteLine(response); } else if (commands[0].ToUpper() == "DELETE") { var response = client.SendDeleteRequest(commands[1]).Result; Console.WriteLine(response); } else if (commands[0].ToUpper() == "OPTIONS") { var response = client.SendOptionsRequest(commands[1]).Result; Console.WriteLine(response); } else if (commands[0].ToUpper() == "TRACE") { var response = client.SendTraceRequest(commands[1]).Result; Console.WriteLine(response); } else { Console.WriteLine("Unknown HTTP method"); } } // Disconnect the client Console.Write("Client disconnecting..."); client.Disconnect(); Console.WriteLine("Done!"); }