public async Task ShouldSupportIgnoreHTTPSErrorsOption()
        {
            await using (var originalBrowser = await Puppeteer.LaunchAsync(TestConstants.DefaultBrowserOptions()))
                await using (var browser = await Puppeteer.ConnectAsync(new ConnectOptions
                {
                    BrowserWSEndpoint = originalBrowser.WebSocketEndpoint,
                    IgnoreHTTPSErrors = true
                }))
                    await using (var page = await browser.NewPageAsync())
                    {
                        var requestTask = HttpsServer.WaitForRequest(
                            "/empty.html",
                            request => request.HttpContext.Features.Get <ITlsHandshakeFeature>().Protocol);
                        var responseTask = page.GoToAsync(TestConstants.HttpsPrefix + "/empty.html");

                        await Task.WhenAll(
                            requestTask,
                            responseTask);

                        var response = responseTask.Result;
                        Assert.True(response.Ok);
                        Assert.NotNull(response.SecurityDetails);
                        Assert.Equal(
                            TestUtils.CurateProtocol(requestTask.Result.ToString()),
                            TestUtils.CurateProtocol(response.SecurityDetails.Protocol));
                    }
        }
Esempio n. 2
0
 public HttpsSession(HttpsServer server)
     : base(server)
 {
     Cache    = server.Cache;
     Request  = new HttpRequest();
     Response = new HttpResponse();
 }
Esempio n. 3
0
        public void Run(string bindAddress, ushort port)
        {
            httpsServer = new HttpsServer(SSLVerifyMode.None, "./ssl-cert/server.cer", "./ssl-cert/server.key", "123456", "./ssl-cert/ca.crt", null);
            // 需要自己初始化ssl环境
            httpsServer.Initialize();

            httpsServer.IpAddress = bindAddress;
            httpsServer.Port      = port;

            // 设置http服务器事件
            httpsServer.OnMessageBegin    += new HttpEvent.OnMessageBeginEventHandler(OnMessageBegin);
            httpsServer.OnHeader          += new HttpEvent.OnHeaderEventHandler(OnHeader);
            httpsServer.OnChunkHeader     += new HttpEvent.OnChunkHeaderEventHandler(OnChunkHeader);
            httpsServer.OnChunkComplete   += new HttpEvent.OnChunkCompleteEventHandler(OnChunkComplete);
            httpsServer.OnUpgrade         += new HttpEvent.OnUpgradeEventHandler(OnUpgrade);
            httpsServer.OnRequestLine     += new HttpServerEvent.OnRequestLineEventHandler(OnRequestLine);
            httpsServer.OnHeadersComplete += new HttpEvent.OnHeadersCompleteEventHandler(OnHeadersComplete);
            httpsServer.OnPointerDataBody += new HttpEvent.OnPointerDataBodyEventHandler(OnPointerDataBody);
            httpsServer.OnMessageComplete += new HttpEvent.OnMessageCompleteEventHandler(OnMessageComplete);
            httpsServer.OnParseError      += new HttpEvent.OnParseErrorEventHandler(OnParseError);



            if (!httpsServer.Start())
            {
                throw new MyException(string.Format("启动失败,错误码:{0},错误信息:{1}", httpsServer.ErrorCode, httpsServer.ErrorMessage));
            }
        }
        public async Task NetworkRedirectsShouldReportSecurityDetails()
        {
            var responses = new List <Response>();

            HttpsServer.SetRedirect("/plzredirect", "/empty.html");

            Page.Response += (_, e) => responses.Add(e.Response);

            var requestTask = HttpsServer.WaitForRequest(
                "/empty.html",
                request => request?.HttpContext?.Features?.Get <ITlsHandshakeFeature>()?.Protocol);
            var responseTask = Page.GoToAsync(TestConstants.HttpsPrefix + "/plzredirect");

            await Task.WhenAll(
                requestTask,
                responseTask).WithTimeout();

            var response = responseTask.Result;

            Assert.Equal(2, responses.Count);
            Assert.Equal(HttpStatusCode.Found, responses[0].Status);
            Assert.Equal(
                TestUtils.CurateProtocol(requestTask.Result.ToString()),
                TestUtils.CurateProtocol(response.SecurityDetails.Protocol));
        }
Esempio n. 5
0
        public async Task NetworkRedirectsShouldReportSecurityDetails()
        {
            var responses = new List <Response>();

            HttpsServer.SetRedirect("/plzredirect", "/empty.html");

            Page.Response += (sender, e) => responses.Add(e.Response);

            await Page.GoToAsync(TestConstants.HttpsPrefix + "/plzredirect");

            Assert.Equal(2, responses.Count);
            Assert.Equal(HttpStatusCode.Found, responses[0].Status);
            Assert.Equal("TLS 1.2", responses[0].SecurityDetails.Protocol);
        }
Esempio n. 6
0
        public async Task ShouldWorkWithMixedContent()
        {
            HttpsServer.SetRoute("/mixedcontent.html", async(context) =>
            {
                await context.Response.WriteAsync($"<iframe src='{TestConstants.EmptyPage}'></iframe>");
            });
            await using var context = await Browser.NewContextAsync(new BrowserContextOptions { IgnoreHTTPSErrors = true });

            var page = await context.NewPageAsync();

            await page.GoToAsync(TestConstants.HttpsPrefix + "/mixedcontent.html", LifecycleEvent.DOMContentLoaded);

            Assert.Equal(2, page.Frames.Length);
            Assert.Equal(3, await page.MainFrame.EvaluateAsync <int>("1 + 2"));
            Assert.Equal(5, await page.FirstChildFrame().EvaluateAsync <int>("2 + 3"));
        }
        public async Task ShouldWorkWithMixedContent()
        {
            HttpsServer.SetRoute("/mixedcontent.html", async(context) =>
            {
                await context.Response.WriteAsync($"<iframe src='{Server.EmptyPage}'></iframe>");
            });
            await using var context = await Browser.NewContextAsync(new() { IgnoreHTTPSErrors = true });

            var page = await context.NewPageAsync();

            await page.GotoAsync(HttpsServer.Prefix + "/mixedcontent.html", new() { WaitUntil = WaitUntilState.DOMContentLoaded });

            Assert.AreEqual(2, page.Frames.Count);
            Assert.AreEqual(3, await page.MainFrame.EvaluateAsync <int>("1 + 2"));
            Assert.AreEqual(5, await page.FirstChildFrame().EvaluateAsync <int>("2 + 3"));
        }
        public async Task ShouldWorkWithMixedContent()
        {
            HttpsServer.SetRoute("/mixedcontent.html", async(context) =>
            {
                await context.Response.WriteAsync($"<iframe src='{TestConstants.EmptyPage}'></iframe>");
            });
            var page = await NewPageAsync(new BrowserContextOptions { IgnoreHTTPSErrors = true });

            await page.GoToAsync(TestConstants.HttpsPrefix + "/mixedcontent.html", new GoToOptions
            {
                WaitUntil = new[] { WaitUntilNavigation.Load }
            });

            Assert.Equal(2, page.Frames.Length);
            Assert.Equal(3, await page.MainFrame.EvaluateAsync <int>("1 + 2"));
            Assert.Equal(5, await page.FirstChildFrame().EvaluateAsync <int>("2 + 3"));
        }
        public async Task ShouldWork()
        {
            var page = await NewPageAsync(new BrowserContextOptions { IgnoreHTTPSErrors = true });

            var requestTask = HttpsServer.WaitForRequest(
                "/empty.html",
                request => request.HttpContext.Features.Get <ITlsHandshakeFeature>().Protocol);
            var responseTask = page.GoToAsync(TestConstants.HttpsPrefix + "/empty.html");

            await Task.WhenAll(
                requestTask,
                responseTask);

            var response = responseTask.Result;

            Assert.Equal(HttpStatusCode.OK, response.Status);
        }
        public async Task ShouldWorkWithMixedContent()
        {
            HttpsServer.SetRoute("/mixedcontent.html", async(context) =>
            {
                await context.Response.WriteAsync($"<iframe src='{TestConstants.EmptyPage}'></iframe>");
            });
            await Page.GoToAsync(TestConstants.HttpsPrefix + "/mixedcontent.html", new NavigationOptions
            {
                WaitUntil = new[] { WaitUntilNavigation.Load }
            });

            Assert.Equal(2, Page.Frames.Length);
            // Make sure blocked iframe has functional execution context
            // @see https://github.com/GoogleChrome/puppeteer/issues/2709
            Assert.Equal(3, await Page.MainFrame.EvaluateExpressionAsync <int>("1 + 2"));
            Assert.Equal(5, await Page.FirstChildFrame().EvaluateExpressionAsync <int>("2 + 3"));
        }
        public async Task ShouldWorkWithWebSocket()
        {
            HttpsServer.SendOnWebSocketConnection("incoming");
            await using var context = await Browser.NewContextAsync(new() { IgnoreHTTPSErrors = true });

            var page = await context.NewPageAsync();

            string value = await page.EvaluateAsync <string>(@"endpoint => {
                let cb;
              const result = new Promise(f => cb = f);
              const ws = new WebSocket(endpoint);
              ws.addEventListener('message', data => { ws.close(); cb(data.data); });
              ws.addEventListener('error', error => cb('Error'));
              return result;
            }", HttpsServer.Prefix.Replace("https", "wss") + "/ws");

            Assert.AreEqual("incoming", value);
        }
        public async Task ShouldWork()
        {
            var requestTask = HttpsServer.WaitForRequest(
                "/empty.html",
                request => request?.HttpContext?.Features?.Get <ITlsHandshakeFeature>()?.Protocol);
            var responseTask = Page.GoToAsync(TestConstants.HttpsPrefix + "/empty.html");

            await Task.WhenAll(
                requestTask,
                responseTask).WithTimeout();

            var response = responseTask.Result;

            Assert.Equal(HttpStatusCode.OK, response.Status);
            Assert.NotNull(response.SecurityDetails);
            Assert.Equal(
                TestUtils.CurateProtocol(requestTask.Result.ToString()),
                TestUtils.CurateProtocol(response.SecurityDetails.Protocol));
        }
Esempio n. 13
0
        public async Task NetworkRedirectsShouldReportSecurityDetails()
        {
            var responses = new List <Response>();
            var options   = TestConstants.DefaultBrowserOptions();

            options.IgnoreHTTPSErrors = true;

            HttpsServer.SetRedirect("/plzredirect", "/empty.html");

            using (var browser = await Puppeteer.LaunchAsync(options, TestConstants.LoggerFactory))
                using (var page = await browser.NewPageAsync())
                {
                    page.Response += (sender, e) => responses.Add(e.Response);

                    await page.GoToAsync(TestConstants.HttpsPrefix + "/plzredirect");

                    Assert.Equal(2, responses.Count);
                    Assert.Equal(HttpStatusCode.Found, responses[0].Status);
                    Assert.Equal("TLS 1.2", responses[0].SecurityDetails.Protocol);
                }
        }
 static async Task Main(string[] args)
 {
     var httpServer = new HttpsServer(1234);
     await httpServer.StartAsync();
 }
Esempio n. 15
0
 public HttpsCacheSession(HttpsServer server) : base(server)
 {
 }
Esempio n. 16
0
 public HttpsTraceSession(HttpsServer server) : base(server)
 {
 }