HttpResponse resp = new DefaultFullHttpResponse(httpRequest.getProtocolVersion(), status); HttpHeaders.setContentLength(resp, 0L);
protected void captureRequestHeaderSize(HttpRequest httpRequest) { String requestLine = httpRequest.getMethod().toString() + ' ' + httpRequest.getUri() + ' ' + httpRequest.getProtocolVersion().toString(); // +2 => CRLF after status line, +4 => header/data separation long requestHeadersSize = requestLine.length() + 6; HttpHeaders headers = httpRequest.headers(); requestHeadersSize += BrowserMobHttpUtil.getHeaderSize(headers); harEntry.getRequest().setHeadersSize(requestHeadersSize); }
@Override public HttpResponse clientToProxyRequest(HttpObject httpObject) { if (proxyServer.isStopped()) { log.warn("Aborting request to {} because proxy is stopped", originalRequest.getUri()); HttpResponse abortedResponse = new DefaultFullHttpResponse(originalRequest.getProtocolVersion(), HttpResponseStatus.SERVICE_UNAVAILABLE); HttpHeaders.setContentLength(abortedResponse, 0L); return abortedResponse; } for (HttpFilters filter : filters) { try { HttpResponse filterResponse = filter.clientToProxyRequest(httpObject); if (filterResponse != null) { // if we are short-circuiting the response to an HttpRequest, update ModifiedRequestAwareFilter instances // with this (possibly) modified HttpRequest before returning the short-circuit response if (httpObject instanceof HttpRequest) { updateFiltersWithModifiedResponse((HttpRequest) httpObject); } return filterResponse; } } catch (RuntimeException e) { log.warn("Filter in filter chain threw exception. Filter method may have been aborted.", e); } } // if this httpObject is the HTTP request, set the modified request object on all ModifiedRequestAwareFilter // instances, so they have access to all modifications the request filters made while filtering if (httpObject instanceof HttpRequest) { updateFiltersWithModifiedResponse((HttpRequest) httpObject); } return null; }
/** * Creates a new {@link HarRequest} object for this failed HTTP CONNECT. Does not populate fields within the request, * such as the error message. * * @param httpConnectRequest the HTTP CONNECT request that failed * @return a new HAR request object */ private HarRequest createRequestForFailedConnect(HttpRequest httpConnectRequest) { String url = getFullUrl(httpConnectRequest); return new HarRequest(httpConnectRequest.getMethod().toString(), url, httpConnectRequest.getProtocolVersion().text()); }
/** * Creates a HarRequest object using the method, url, and HTTP version of the specified request. * * @param httpRequest HTTP request on which the HarRequest will be based * @return a new HarRequest object */ private HarRequest createHarRequestForHttpRequest(HttpRequest httpRequest) { // the HAR spec defines the request.url field as: // url [string] - Absolute URL of the request (fragments are not included). // the URI on the httpRequest may only identify the path of the resource, so find the full URL. // the full URL consists of the scheme + host + port (if non-standard) + path + query params + fragment. String url = getFullUrl(httpRequest); return new HarRequest(httpRequest.getMethod().toString(), url, httpRequest.getProtocolVersion().text()); }
@Override public HttpResponse clientToProxyRequest(HttpObject httpObject) { if (httpObject instanceof HttpRequest) { HttpRequest httpRequest = (HttpRequest) httpObject; String url = getFullUrl(httpRequest); for (BlacklistEntry entry : blacklistedUrls) { if (HttpMethod.CONNECT.equals(httpRequest.getMethod()) && entry.getHttpMethodPattern() == null) { // do not allow CONNECTs to be blacklisted unless a method pattern is explicitly specified continue; } if (entry.matches(url, httpRequest.getMethod().name())) { HttpResponseStatus status = HttpResponseStatus.valueOf(entry.getStatusCode()); HttpResponse resp = new DefaultFullHttpResponse(httpRequest.getProtocolVersion(), status); HttpHeaders.setContentLength(resp, 0L); return resp; } } } return null; } }
private void writeResponse(Channel channel, HttpResponseStatus statusCode) { // Convert the response content to a ChannelBuffer. ByteBuf buf = copiedBuffer(responseContent.toString(), CharsetUtil.UTF_8); responseContent.setLength(0); // Decide whether to close the connection or not. boolean close = HttpHeaders.Values.CLOSE.equalsIgnoreCase(request.headers().get(CONNECTION)) || request.getProtocolVersion().equals(HttpVersion.HTTP_1_0) && !HttpHeaders.Values.KEEP_ALIVE.equalsIgnoreCase(request.headers().get(CONNECTION)); // Build the response object. FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, statusCode, buf); response.headers().set(CONTENT_TYPE, "text/plain; charset=UTF-8"); if (!close) { // There's no need to add 'Content-Length' header if this is the last response. response.headers().set(CONTENT_LENGTH, buf.readableBytes()); } // Write the response. ChannelFuture future = channel.writeAndFlush(response); // Close the connection after the write operation is done if necessary. if (close) { future.addListener(ChannelFutureListener.CLOSE); } }
@Override public String getProtocol() { return this.originalRequest.getProtocolVersion().toString(); }
private static void writeNotFoundResponse(final HttpRequest request, final ChannelHandlerContext ctx) { final FullHttpResponse response = new DefaultFullHttpResponse(request.getProtocolVersion(), NOT_FOUND, Unpooled.copiedBuffer("Not found", CharsetUtil.UTF_8)); writeResponse(ctx.channel(), request, response); }
@Override public void exceptionCaught(final ChannelHandlerContext ctx, final Throwable cause) throws Exception { if (cause instanceof WebSocketHandshakeException) { final HttpRequest request = ctx.attr(REQUEST_KEY).get(); logger.error("Failed with ws handshake for request: " + request, cause); ctx.writeAndFlush(internalServerErrorResponse(request.getProtocolVersion(), cause.getMessage())) .addListener(ChannelFutureListener.CLOSE); } else { ctx.fireExceptionCaught(cause); } }
protected HttpResponse createResponse(final String contentType) { final HttpVersion version = request.getProtocolVersion(); final HttpResponse response = new DefaultHttpResponse(version, HttpResponseStatus.OK); if (request.getProtocolVersion().equals(HttpVersion.HTTP_1_1)) { response.headers().set(TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED); } response.headers().set(CONTENT_TYPE, contentType); Transports.setDefaultHeaders(response, config); return response; }
protected HttpResponse createResponse(String contentType) { final HttpVersion version = request.getProtocolVersion(); HttpResponse response = new DefaultHttpResponse(version, HttpResponseStatus.OK); if (request.getProtocolVersion().equals(HttpVersion.HTTP_1_1)) { response.headers().set(TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED); } response.headers().set(CONTENT_TYPE, contentType); Transports.setDefaultHeaders(response, config); return response; }
@Override public Protocol protocol() { HttpVersion version = this.nettyRequest.getProtocolVersion(); if (version.equals(HttpVersion.HTTP_1_0)) { return Protocol.HTTP_1_0; } else if (version.equals(HttpVersion.HTTP_1_1)) { return Protocol.HTTP_1_1; } throw new IllegalStateException(version.protocolName() + " not supported"); }
private void respondCallbackRequired(final ChannelHandlerContext ctx) { final FullHttpResponse response = Transports.responseWithContent(request.getProtocolVersion(), INTERNAL_SERVER_ERROR, Transports.CONTENT_TYPE_PLAIN, "\"callback\" parameter required"); Transports.setNoCacheHeaders(response); Transports.writeResponse(ctx, response); }
protected HttpServerRequest(Channel channel, HttpRequest nettyRequest, UnicastContentSubject<T> content) { super(content); nettyChannel = channel; this.nettyRequest = nettyRequest; headers = new HttpRequestHeaders(this.nettyRequest); method = this.nettyRequest.getMethod(); protocolVersion = this.nettyRequest.getProtocolVersion(); uriInfoHolder = new UriInfoHolder(this.nettyRequest.getUri()); cookiesHolder = CookiesHolder.newServerRequestHolder(nettyRequest.headers()); }
protected void captureRequestHeaderSize(HttpRequest httpRequest) { Log.e("InnerHandle", "captureRequestHeaderSize " + harEntry.getId()); String requestLine = httpRequest.getMethod().toString() + ' ' + httpRequest.getUri() + ' ' + httpRequest.getProtocolVersion().toString(); // +2 => CRLF after status line, +4 => header/data separation long requestHeadersSize = requestLine.length() + 6; HttpHeaders headers = httpRequest.headers(); requestHeadersSize += BrowserMobHttpUtil.getHeaderSize(headers); harRequest.getRequest().setHeadersSize(requestHeadersSize); }
protected void captureRequestHeaderSize(HttpRequest httpRequest) { String requestLine = httpRequest.getMethod().toString() + ' ' + httpRequest.getUri() + ' ' + httpRequest.getProtocolVersion().toString(); // +2 => CRLF after status line, +4 => header/data separation long requestHeadersSize = requestLine.length() + 6; HttpHeaders headers = httpRequest.headers(); requestHeadersSize += BrowserMobHttpUtil.getHeaderSize(headers); harEntry.getRequest().setHeadersSize(requestHeadersSize); }
/** * Creates a new {@link HarRequest} object for this failed HTTP CONNECT. Does not populate fields within the request, * such as the error message. * * @param httpConnectRequest the HTTP CONNECT request that failed * @return a new HAR request object */ private HarRequest createRequestForFailedConnect(HttpRequest httpConnectRequest) { String url = getFullUrl(httpConnectRequest); return new HarRequest(httpConnectRequest.getMethod().toString(), url, httpConnectRequest.getProtocolVersion().text()); }
/** * Creates a new {@link HarRequest} object for this failed HTTP CONNECT. Does not populate fields within the request, * such as the error message. * * @param httpConnectRequest the HTTP CONNECT request that failed * @return a new HAR request object */ private HarRequest createRequestForFailedConnect(HttpRequest httpConnectRequest) { String url = getFullUrl(httpConnectRequest); return new HarRequest(httpConnectRequest.getMethod().toString(), url, httpConnectRequest.getProtocolVersion().text()); }
/** * Creates a new {@link HarRequest} object for this failed HTTP CONNECT. Does not populate fields within the request, * such as the error message. * * @param httpConnectRequest the HTTP CONNECT request that failed * @return a new HAR request object */ private HarRequest createRequestForFailedConnect(HttpRequest httpConnectRequest) { String url = getFullUrl(httpConnectRequest); return new HarRequest(httpConnectRequest.getMethod().toString(), url, httpConnectRequest.getProtocolVersion().text()); }