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; }
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 }); }
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 }); }
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); }
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); }
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); }
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); }
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); }
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 }); } }