private void OnFetchRequestPaused(object sender, Fetch.RequestPausedEventArgs e)
        {
            if (e.ResponseErrorReason == null && e.ResponseStatusCode == null)
            {
                RequestPausedEventArgs wrapped = new RequestPausedEventArgs();
                wrapped.RequestData = new HttpRequestData()
                {
                    RequestId = e.RequestId,
                    Method    = e.Request.Method,
                    Url       = e.Request.Url,
                    PostData  = e.Request.PostData,
                    Headers   = new Dictionary <string, string>(e.Request.Headers)
                };
                this.OnRequestPaused(wrapped);
            }
            else
            {
                ResponsePausedEventArgs wrapped = new ResponsePausedEventArgs();
                wrapped.ResponseData = new HttpResponseData()
                {
                    RequestId    = e.RequestId,
                    StatusCode   = e.ResponseStatusCode.Value,
                    Url          = e.Request.Url,
                    ResourceType = e.ResourceType.ToString(),
                    ErrorReason  = e.ResponseErrorReason.HasValue ? e.ResponseErrorReason.Value.ToString() : ""
                };

                foreach (var header in e.ResponseHeaders)
                {
                    wrapped.ResponseData.Headers.Add(header.Name, header.Value);
                }

                this.OnResponsePaused(wrapped);
            }
        }
Exemple #2
0
        private async void OnResponsePaused(object sender, ResponsePausedEventArgs e)
        {
            if (e.ResponseData.Headers.Count > 0)
            {
                // If no headers are present, the body cannot be retrieved.
                await this.session.Value.Domains.Network.AddResponseBody(e.ResponseData);
            }

            if (this.NetworkResponseReceived != null)
            {
                this.NetworkResponseReceived(this, new NetworkResponseReceivedEventArgs(e.ResponseData));
            }

            foreach (var handler in this.responseHandlers)
            {
                if (handler.ResponseMatcher.Invoke(e.ResponseData))
                {
                    // NOTE: We create a dummy HttpRequestData object here, because the ContinueRequestWithResponse
                    // method demands one; however, the only property used by that method is the RequestId property.
                    // It might be better to refactor that method signature to simply pass the request ID, or
                    // alternatively, just pass the response data, which should also contain the request ID anyway.
                    HttpRequestData requestData = new HttpRequestData()
                    {
                        RequestId = e.ResponseData.RequestId
                    };
                    await this.session.Value.Domains.Network.ContinueRequestWithResponse(requestData, handler.ResponseTransformer(e.ResponseData));

                    return;
                }
            }

            await this.session.Value.Domains.Network.ContinueResponseWithoutModification(e.ResponseData);
        }
Exemple #3
0
        private void OnFetchRequestPaused(object sender, Fetch.RequestPausedEventArgs e)
        {
            if (e.ResponseErrorReason == null && e.ResponseStatusCode == null)
            {
                RequestPausedEventArgs wrapped = new RequestPausedEventArgs();
                wrapped.RequestData = new HttpRequestData()
                {
                    RequestId = e.RequestId,
                    Method    = e.Request.Method,
                    Url       = e.Request.Url,
                    PostData  = e.Request.PostData,
                    Headers   = new Dictionary <string, string>(e.Request.Headers)
                };

                this.OnRequestPaused(wrapped);
            }
            else
            {
                ResponsePausedEventArgs wrappedResponse = new ResponsePausedEventArgs();
                wrappedResponse.ResponseData = new HttpResponseData()
                {
                    RequestId    = e.RequestId,
                    Url          = e.Request.Url,
                    ResourceType = e.ResourceType.ToString()
                };

                if (e.ResponseStatusCode.HasValue)
                {
                    wrappedResponse.ResponseData.StatusCode = e.ResponseStatusCode.Value;
                }

                if (e.ResponseHeaders != null)
                {
                    foreach (var header in e.ResponseHeaders)
                    {
                        if (header.Name.ToLowerInvariant() == "set-cookie")
                        {
                            wrappedResponse.ResponseData.CookieHeaders.Add(header.Value);
                        }
                        else
                        {
                            if (wrappedResponse.ResponseData.Headers.ContainsKey(header.Name))
                            {
                                string currentHeaderValue = wrappedResponse.ResponseData.Headers[header.Name];
                                wrappedResponse.ResponseData.Headers[header.Name] = currentHeaderValue + ", " + header.Value;
                            }
                            else
                            {
                                wrappedResponse.ResponseData.Headers.Add(header.Name, header.Value);
                            }
                        }
                    }
                }

                this.OnResponsePaused(wrappedResponse);
            }
        }
        private async void OnResponsePaused(object sender, ResponsePausedEventArgs e)
        {
            await this.session.Value.Domains.Network.AddResponseBody(e.ResponseData);

            await this.session.Value.Domains.Network.ContinueResponseWithoutModification(e.ResponseData);

            if (this.NetworkResponseReceived != null)
            {
                this.NetworkResponseReceived(this, new NetworkResponseRecievedEventArgs(e.ResponseData));
            }
        }
        private void OnNetworkResponseReceived(object sender, Network.ResponseReceivedEventArgs e)
        {
            HttpResponseData responseData = new HttpResponseData()
            {
                RequestId    = e.RequestId,
                StatusCode   = e.Response.Status,
                Url          = e.Response.Url,
                ResourceType = e.Type.ToString()
            };

            foreach (var header in e.Response.Headers)
            {
                responseData.Headers.Add(header.Key, header.Value);
            }

            ResponsePausedEventArgs wrapped = new ResponsePausedEventArgs()
            {
                ResponseData = responseData
            };

            this.OnResponsePaused(wrapped);
        }