Class HttpConnectHarCaptureFilter

  • All Implemented Interfaces:
    ModifiedRequestAwareFilter, org.littleshoot.proxy.HttpFilters

    public class HttpConnectHarCaptureFilter
    extends HttpsAwareFiltersAdapter
    implements ModifiedRequestAwareFilter
    This filter captures HAR data for HTTP CONNECT requests. CONNECTs are "meta" requests that must be made before HTTPS requests, but are not populated as separate requests in the HAR. Most information from HTTP CONNECTs (such as SSL handshake time, dns resolution time, etc.) is populated in the HAR entry for the first "true" request following the CONNECT. This filter captures the timing-related information and makes it available to subsequent filters through static methods. This filter also handles HTTP CONNECT errors and creates HAR entries for those errors, since there would otherwise not be any record in the HAR of the error (if the CONNECT fails, there will be no subsequent "real" request in which to record the error).
    • Constructor Detail

      • HttpConnectHarCaptureFilter

        public HttpConnectHarCaptureFilter​(io.netty.handler.codec.http.HttpRequest originalRequest,
                                           io.netty.channel.ChannelHandlerContext ctx,
                                           Har har,
                                           java.lang.String currentPageRef)
    • Method Detail

      • clientToProxyRequest

        public io.netty.handler.codec.http.HttpResponse clientToProxyRequest​(io.netty.handler.codec.http.HttpObject httpObject)
        Specified by:
        clientToProxyRequest in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        clientToProxyRequest in class org.littleshoot.proxy.HttpFiltersAdapter
      • proxyToServerResolutionFailed

        public void proxyToServerResolutionFailed​(java.lang.String hostAndPort)
        Specified by:
        proxyToServerResolutionFailed in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        proxyToServerResolutionFailed in class org.littleshoot.proxy.HttpFiltersAdapter
      • proxyToServerConnectionFailed

        public void proxyToServerConnectionFailed()
        Specified by:
        proxyToServerConnectionFailed in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        proxyToServerConnectionFailed in class org.littleshoot.proxy.HttpFiltersAdapter
      • proxyToServerConnectionSucceeded

        public void proxyToServerConnectionSucceeded​(io.netty.channel.ChannelHandlerContext serverCtx)
        Specified by:
        proxyToServerConnectionSucceeded in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        proxyToServerConnectionSucceeded in class org.littleshoot.proxy.HttpFiltersAdapter
      • proxyToServerConnectionSSLHandshakeStarted

        public void proxyToServerConnectionSSLHandshakeStarted()
        Specified by:
        proxyToServerConnectionSSLHandshakeStarted in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        proxyToServerConnectionSSLHandshakeStarted in class org.littleshoot.proxy.HttpFiltersAdapter
      • serverToProxyResponseTimedOut

        public void serverToProxyResponseTimedOut()
        Specified by:
        serverToProxyResponseTimedOut in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        serverToProxyResponseTimedOut in class org.littleshoot.proxy.HttpFiltersAdapter
      • proxyToServerConnectionQueued

        public void proxyToServerConnectionQueued()
        Specified by:
        proxyToServerConnectionQueued in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        proxyToServerConnectionQueued in class org.littleshoot.proxy.HttpFiltersAdapter
      • proxyToServerResolutionStarted

        public java.net.InetSocketAddress proxyToServerResolutionStarted​(java.lang.String resolvingServerHostAndPort)
        Specified by:
        proxyToServerResolutionStarted in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        proxyToServerResolutionStarted in class org.littleshoot.proxy.HttpFiltersAdapter
      • proxyToServerResolutionSucceeded

        public void proxyToServerResolutionSucceeded​(java.lang.String serverHostAndPort,
                                                     java.net.InetSocketAddress resolvedRemoteAddress)
        Specified by:
        proxyToServerResolutionSucceeded in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        proxyToServerResolutionSucceeded in class org.littleshoot.proxy.HttpFiltersAdapter
      • proxyToServerConnectionStarted

        public void proxyToServerConnectionStarted()
        Specified by:
        proxyToServerConnectionStarted in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        proxyToServerConnectionStarted in class org.littleshoot.proxy.HttpFiltersAdapter
      • proxyToServerRequestSending

        public void proxyToServerRequestSending()
        Specified by:
        proxyToServerRequestSending in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        proxyToServerRequestSending in class org.littleshoot.proxy.HttpFiltersAdapter
      • proxyToServerRequestSent

        public void proxyToServerRequestSent()
        Specified by:
        proxyToServerRequestSent in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        proxyToServerRequestSent in class org.littleshoot.proxy.HttpFiltersAdapter
      • serverToProxyResponseReceiving

        public void serverToProxyResponseReceiving()
        Specified by:
        serverToProxyResponseReceiving in interface org.littleshoot.proxy.HttpFilters
        Overrides:
        serverToProxyResponseReceiving in class org.littleshoot.proxy.HttpFiltersAdapter
      • consumeConnectTimingForConnection

        public static HttpConnectTiming consumeConnectTimingForConnection​(java.net.InetSocketAddress clientAddress)
        Retrieves and removes (thus "consumes") the SSL timing information from the connection cache for the specified address.
        Parameters:
        clientAddress - the address of the client connection that established the HTTP tunnel
        Returns:
        the timing information for the tunnel previously established from the clientAddress
      • setModifiedHttpRequest

        public void setModifiedHttpRequest​(io.netty.handler.codec.http.HttpRequest modifiedHttpRequest)
        Description copied from interface: ModifiedRequestAwareFilter
        Notifies implementing classes of the modified HttpRequest that will be sent to the server, reflecting all modifications from filters.
        Specified by:
        setModifiedHttpRequest in interface ModifiedRequestAwareFilter
        Parameters:
        modifiedHttpRequest - the modified HttpRequest sent to the server