private void OnRequest(NetworkRequestWillBeSentChromiumEvent e, string interceptionId) { if (e.Request.Url.StartsWith("data:")) { return; } var redirectChain = new List <Request>(); if (e.RedirectResponse != null) { // If we connect late to the target, we could have missed the requestWillBeSent event. if (_requestIdToRequest.TryGetValue(e.RequestId, out var requestRedirected)) { HandleRequestRedirect(requestRedirected, e.RedirectResponse); redirectChain = requestRedirected.Request.RedirectChain; } } _page.FrameManager.Frames.TryGetValue(e.FrameId ?? string.Empty, out var frame); bool isNavigationRequest = e.RequestId == e.LoaderId && e.Type == Protocol.Network.ResourceType.Document; string documentId = isNavigationRequest ? e.LoaderId : null; var request = new ChromiumInterceptableRequest( _client, frame, interceptionId, documentId, _userRequestInterceptionEnabled, e, redirectChain); _requestIdToRequest.TryAdd(e.RequestId, request); _page.FrameManager.RequestStarted(request.Request); }
private void OnRequestWillBeSent(NetworkRequestWillBeSentChromiumEvent e) { // Request interception doesn't happen for data URLs with Network Service. if (_protocolRequestInterceptionEnabled && !e.Request.Url.StartsWith(":data:")) { string requestId = e.RequestId; if (_requestIdToInterceptionId.TryRemove(requestId, out string interceptionId)) { OnRequest(e, interceptionId); } else { _requestIdToRequestWillBeSentEvent[e.RequestId] = e; } return; } OnRequest(e, null); }
public ChromiumInterceptableRequest( ChromiumSession client, Frame frame, string interceptionId, string documentId, bool requestInterceptionEnabled, NetworkRequestWillBeSentChromiumEvent e, List <Request> redirectChain) { _client = client; RequestId = e.RequestId; InterceptionId = interceptionId; Request = new Request( requestInterceptionEnabled ? this : null, frame, redirectChain, documentId, e.Request.Url, (e.Type ?? Protocol.Network.ResourceType.Other).ToPlaywrightResourceType(), new HttpMethod(e.Request.Method), e.Request.PostData, e.Request.Headers); }