/** * Create a copy of this HTTP response, replacing its statusLine with the provided one. * * @param statusLine to replace * @return copy of this HTTP message with the provided statusLine */ public RawHttpResponse<Response> withStatusLine(StatusLine statusLine) { return new RawHttpResponse<>(libResponse, request, statusLine, getHeaders(), getBody().orElse(null)); }
/** * Create a copy of this HTTP response, replacing its statusLine with the provided one. * * @param statusLine to replace * @return copy of this HTTP message with the provided statusLine */ public RawHttpResponse<Response> withStatusLine(StatusLine statusLine) { return new RawHttpResponse<>(libResponse, request, statusLine, getHeaders(), getBody().orElse(null)); }
@Override public RawHttpResponse<Response> withBody(HttpMessageBody body) { return new RawHttpResponse<>(libResponse, request, statusLine, body.headersFrom(getHeaders()), body.toBodyReader()); }
@Override public RawHttpResponse<Response> withBody(HttpMessageBody body) { return new RawHttpResponse<>(libResponse, request, statusLine, body.headersFrom(getHeaders()), body.toBodyReader()); }
@Override public RawHttpResponse<Response> withHeaders(RawHttpHeaders headers, boolean append) { return new RawHttpResponse<>(libResponse, request, statusLine, append ? getHeaders().and(headers) : headers.and(getHeaders()), getBody().orElse(null)); }
@Override public RawHttpResponse<Response> withHeaders(RawHttpHeaders headers, boolean append) { return new RawHttpResponse<>(libResponse, request, statusLine, append ? getHeaders().and(headers) : headers.and(getHeaders()), getBody().orElse(null)); }
/** * Parses the HTTP response produced by the given stream. * * @param inputStream producing a HTTP response * @param requestLine optional {@link RequestLine} of the request which results in this response. * If provided, it is taken into consideration when deciding whether the response contains * a body. See <a href="https://tools.ietf.org/html/rfc7230#section-3.3">Section 3.3</a> * of RFC-7230 for details. * @return a parsed HTTP response object * @throws InvalidHttpResponse if the response is invalid * @throws IOException if a problem occurs accessing the stream */ public RawHttpResponse<Void> parseResponse(InputStream inputStream, @Nullable RequestLine requestLine) throws IOException { StatusLine statusLine = metadataParser.parseStatusLine(inputStream); RawHttpHeaders headers = metadataParser.parseHeaders(inputStream, (message, lineNumber) -> // add 1 to the line number to correct for the start-line new InvalidHttpResponse(message, lineNumber + 1)); @Nullable BodyReader bodyReader = responseHasBody(statusLine, requestLine) ? createBodyReader(inputStream, statusLine, headers) : null; return new RawHttpResponse<>(null, null, statusLine, headers, bodyReader); }
/** * Parses the HTTP response produced by the given stream. * * @param inputStream producing a HTTP response * @param requestLine optional {@link RequestLine} of the request which results in this response. * If provided, it is taken into consideration when deciding whether the response contains * a body. See <a href="https://tools.ietf.org/html/rfc7230#section-3.3">Section 3.3</a> * of RFC-7230 for details. * @return a parsed HTTP response object * @throws InvalidHttpResponse if the response is invalid * @throws IOException if a problem occurs accessing the stream */ public RawHttpResponse<Void> parseResponse(InputStream inputStream, @Nullable RequestLine requestLine) throws IOException { StatusLine statusLine = metadataParser.parseStatusLine(inputStream); RawHttpHeaders headers = metadataParser.parseHeaders(inputStream, (message, lineNumber) -> // add 1 to the line number to correct for the start-line new InvalidHttpResponse(message, lineNumber + 1)); @Nullable BodyReader bodyReader = responseHasBody(statusLine, requestLine) ? createBodyReader(inputStream, statusLine, headers) : null; return new RawHttpResponse<>(null, null, statusLine, headers, bodyReader); }
public RawHttpResponse<CloseableHttpResponse> send(RawHttpRequest request) throws IOException { RequestBuilder builder = RequestBuilder.create(request.getMethod()); builder.setUri(request.getUri()); builder.setVersion(toProtocolVersion(request.getStartLine().getHttpVersion())); request.getHeaders().getHeaderNames().forEach((name) -> request.getHeaders().get(name).forEach(value -> builder.addHeader(new BasicHeader(name, value)))); request.getBody().ifPresent(b -> builder.setEntity(new InputStreamEntity(b.asRawStream()))); CloseableHttpResponse response = httpClient.execute(builder.build()); RawHttpHeaders headers = readHeaders(response); StatusLine statusLine = adaptStatus(response.getStatusLine()); @Nullable LazyBodyReader body; if (response.getEntity() != null) { FramedBody framedBody = http.getFramedBody(statusLine, headers); body = new LazyBodyReader(framedBody, response.getEntity().getContent()); } else { body = null; } return new RawHttpResponse<>(response, request, statusLine, headers, body); }