コード例 #1
0
ファイル: Request.cs プロジェクト: zhaoyingju/puppeteer-sharp
        internal Request(
            CDPSession client,
            Frame frame,
            string interceptionId,
            bool allowInterception,
            RequestWillBeSentPayload e,
            List <Request> redirectChain)
        {
            _client              = client;
            _allowInterception   = allowInterception;
            _interceptionHandled = false;
            _logger              = _client.Connection.LoggerFactory.CreateLogger <Request>();

            RequestId           = e.RequestId;
            InterceptionId      = interceptionId;
            IsNavigationRequest = e.RequestId == e.LoaderId && e.Type == ResourceType.Document;
            Url               = e.Request.Url;
            ResourceType      = e.Type;
            Method            = e.Request.Method;
            PostData          = e.Request.PostData;
            Frame             = frame;
            RedirectChainList = redirectChain;

            Headers = new Dictionary <string, string>();
            foreach (var keyValue in e.Request.Headers)
            {
                Headers[keyValue.Key] = keyValue.Value;
            }

            FromMemoryCache = false;
        }
コード例 #2
0
        private async Task OnRequestAsync(RequestWillBeSentPayload e, string interceptionId)
        {
            Request request;
            var     redirectChain = new List <Request>();

            if (e.RedirectResponse != null)
            {
                _requestIdToRequest.TryGetValue(e.RequestId, out request);

                // If we connect late to the target, we could have missed the requestWillBeSent event.
                if (request != null)
                {
                    HandleRequestRedirect(request, e.RedirectResponse);
                    redirectChain = request.RedirectChainList;
                }
            }

            var frame = !string.IsNullOrEmpty(e.FrameId) ? await FrameManager.TryGetFrameAsync(e.FrameId).ConfigureAwait(false) : null;

            request = new Request(
                _client,
                frame,
                interceptionId,
                _userRequestInterceptionEnabled,
                e,
                redirectChain);

            _requestIdToRequest[e.RequestId] = request;

            Request?.Invoke(this, new RequestEventArgs
            {
                Request = request
            });
        }
コード例 #3
0
        private void OnRequest(RequestWillBeSentPayload e, string interceptionId)
        {
            Request request;
            var     redirectChain = new List <Request>();

            if (e.RedirectResponse != null)
            {
                _requestIdToRequest.TryGetValue(e.RequestId, out request);
                // If we connect late to the target, we could have missed the requestWillBeSent event.
                if (request != null)
                {
                    HandleRequestRedirect(request, e.RedirectResponse);
                    redirectChain = request.RedirectChainList;
                }
            }
            var frame = !string.IsNullOrEmpty(e.FrameId) ? _frameManager.Frames[e.FrameId] : null;

            request = new Request(
                _client,
                frame,
                interceptionId,
                _userRequestInterceptionEnabled,
                e,
                redirectChain);

            _requestIdToRequest.Add(e.RequestId, request);
            Request(this, new RequestEventArgs
            {
                Request = request
            });
        }
コード例 #4
0
        private void OnRequest(RequestWillBeSentPayload e, string interceptionId)
        {
            var redirectChain = new List <Request>();

            if (e.RedirectResponse != null)
            {
                _requestIdToRequest.TryGetValue(e.RequestId, out var request);
                // If we connect late to the target, we could have missed the requestWillBeSent event.
                if (request != null)
                {
                    HandleRequestRedirect(
                        request,
                        e.RedirectResponse.Status,
                        e.RedirectResponse.Headers,
                        e.RedirectResponse.FromDiskCache,
                        e.RedirectResponse.FromServiceWorker,
                        e.RedirectResponse.SecurityDetails);
                    redirectChain = request.RedirectChainList;
                }
            }
            var isNavigationRequest = e.RequestId == e.LoaderId && e.Type == ResourceType.Document;

            HandleRequestStart(
                e.RequestId,
                interceptionId,
                e.Request.Url,
                isNavigationRequest,
                e.Type,
                e.Request,
                e.FrameId,
                redirectChain);
        }
コード例 #5
0
 private async Task OnRequestWillBeSentAsync(RequestWillBeSentPayload e)
 {
     // Request interception doesn't happen for data URLs with Network Service.
     if (_protocolRequestInterceptionEnabled && !e.Request.Url.StartsWith("data:", StringComparison.InvariantCultureIgnoreCase))
     {
         if (_requestIdToInterceptionId.TryRemove(e.RequestId, out string interceptionId))
         {
             await OnRequestAsync(e, interceptionId).ConfigureAwait(false);
         }
         else
         {
             // Under load, we may get to this section more than once
             _requestIdToRequestWillBeSentEvent.TryAdd(e.RequestId, e);
         }
         return;
     }
     await OnRequestAsync(e, null).ConfigureAwait(false);
 }
コード例 #6
0
        private async Task OnRequestWillBeSentAsync(RequestWillBeSentPayload e)
        {
            // Request interception doesn't happen for data URLs with Network Service.
            if (_userRequestInterceptionEnabled && !e.Request.Url.StartsWith("data:", StringComparison.InvariantCultureIgnoreCase))
            {
                var hasRequestPausedEvent = _requestIdToRequestPausedEvent.TryGetValue(e.RequestId, out var requestPausedEvent);
                _requestIdToRequestWillBeSentEvent[e.RequestId] = e;

                if (hasRequestPausedEvent)
                {
                    var interceptionId = requestPausedEvent.RequestId;
                    await OnRequestAsync(e, interceptionId).ConfigureAwait(false);

                    _requestIdToRequestPausedEvent.TryRemove(e.RequestId, out _);
                }

                return;
            }
            await OnRequestAsync(e, null).ConfigureAwait(false);
        }
コード例 #7
0
 private void OnRequestWillBeSent(RequestWillBeSentPayload e)
 {
     if (_protocolRequestInterceptionEnabled)
     {
         var requestHash    = e.Request.Hash;
         var interceptionId = _requestHashToInterceptionIds.FirstValue(requestHash);
         if (interceptionId != null)
         {
             OnRequest(e, interceptionId);
             _requestHashToInterceptionIds.Delete(requestHash, interceptionId);
         }
         else
         {
             _requestHashToRequestIds.Add(requestHash, e.RequestId);
             _requestIdToRequestWillBeSentEvent.Add(e.RequestId, e);
         }
         return;
     }
     OnRequest(e, null);
 }
コード例 #8
0
        private async Task OnRequestWillBeSentAsync(RequestWillBeSentPayload e)
        {
            // Request interception doesn't happen for data URLs with Network Service.
            if (_protocolRequestInterceptionEnabled && !e.Request.Url.StartsWith("data:", StringComparison.InvariantCultureIgnoreCase))
            {
                var requestHash    = e.Request.Hash;
                var interceptionId = _requestHashToInterceptionIds.FirstValue(requestHash);
                if (interceptionId != null)
                {
                    await OnRequestAsync(e, interceptionId);

                    _requestHashToInterceptionIds.Delete(requestHash, interceptionId);
                }
                else
                {
                    _requestHashToRequestIds.Add(requestHash, e.RequestId);
                    _requestIdToRequestWillBeSentEvent.Add(e.RequestId, e);
                }
                return;
            }
            await OnRequestAsync(e, null);
        }
コード例 #9
0
        private async Task OnRequestAsync(RequestWillBeSentPayload e, string interceptionId)
        {
            Request request;
            var     redirectChain = new List <Request>();

            if (e.RedirectResponse != null)
            {
                _requestIdToRequest.TryGetValue(e.RequestId, out request);
                // If we connect late to the target, we could have missed the requestWillBeSent event.
                if (request != null)
                {
                    HandleRequestRedirect(request, e.RedirectResponse);
                    redirectChain = request.RedirectChainList;
                }
            }
            if (!_requestIdToRequest.TryGetValue(e.RequestId, out var currentRequest) ||
                currentRequest.Frame == null)
            {
                var frame = await FrameManager?.GetFrameAsync(e.FrameId);

                request = new Request(
                    _client,
                    frame,
                    interceptionId,
                    _userRequestInterceptionEnabled,
                    e,
                    redirectChain);

                _requestIdToRequest[e.RequestId] = request;

                Request(this, new RequestEventArgs
                {
                    Request = request
                });
            }
        }