com.linecorp.armeria.common.HttpRequest类的使用及代码示例

x33g5p2x  于2022-01-20 转载在 其他  
字(9.8k)|赞(0)|评价(0)|浏览(153)

本文整理了Java中com.linecorp.armeria.common.HttpRequest类的一些代码示例,展示了HttpRequest类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。HttpRequest类的具体详情如下:
包路径:com.linecorp.armeria.common.HttpRequest
类名称:HttpRequest

HttpRequest介绍

[英]A streamed HTTP/2 Request.

Note: The initial HttpHeaders is not signaled to Subscribers. It is readily available via #headers().
[中]流式HTTP/2请求。
注意:初始HttpHeader不会发送信号给订阅者。可通过#headers()随时获取。

代码示例

代码示例来源:origin: line/armeria

/**
 * Returns the scheme of this request. This method is a shortcut of {@code headers().scheme()}.
 */
default String scheme() {
  return headers().scheme();
}

代码示例来源:origin: line/armeria

/**
 * Creates a new HTTP request and closes the stream.
 *
 * @param method the HTTP method of the request
 * @param path the path of the request
 * @param mediaType the {@link MediaType} of the request content
 * @param content the content of the request
 */
static HttpRequest of(HttpMethod method, String path, MediaType mediaType, HttpData content) {
  return of(method, path, mediaType, content, HttpHeaders.EMPTY_HEADERS);
}

代码示例来源:origin: line/armeria

/**
   * Judge the turning mode.
   * True means turn on, False is turn off.
   * If not present, Not supported.
   * Default implementation is check content is on/off for PUT method
   *
   * @param req HttpRequest
   */
  protected CompletionStage<Optional<Boolean>> mode(@SuppressWarnings("unused") ServiceRequestContext ctx,
                           HttpRequest req) {
    return req.aggregate()
         .thenApply(AggregatedHttpMessage::content)
         .thenApply(HttpData::toStringAscii)
         .thenApply(content -> {
           switch (Ascii.toUpperCase(content)) {
             case "ON":
               return Optional.of(true);
             case "OFF":
               return Optional.of(false);
             default:
               return Optional.empty();
           }
         });
  }
}

代码示例来源:origin: line/armeria

/**
 * Aggregates this request. The returned {@link CompletableFuture} will be notified when the content and
 * the trailing headers of the request is received fully.
 */
default CompletableFuture<AggregatedHttpMessage> aggregate() {
  final CompletableFuture<AggregatedHttpMessage> future = new CompletableFuture<>();
  final HttpRequestAggregator aggregator = new HttpRequestAggregator(this, future, null);
  completionFuture().handle(aggregator);
  subscribe(aggregator);
  return future;
}

代码示例来源:origin: line/armeria

/**
 * Returns {@code true} if the specified {@code request} is a CORS preflight request.
 */
public static boolean isCorsPreflightRequest(com.linecorp.armeria.common.HttpRequest request) {
  requireNonNull(request, "request");
  return request.method() == HttpMethod.OPTIONS &&
      request.headers().contains(HttpHeaderNames.ORIGIN) &&
      request.headers().contains(HttpHeaderNames.ACCESS_CONTROL_REQUEST_METHOD);
}

代码示例来源:origin: line/armeria

ArmeriaServerHttpRequest(ServiceRequestContext ctx,
             HttpRequest req,
             DataBufferFactoryWrapper<?> factoryWrapper) {
  super(URI.create(requireNonNull(req, "req").path()),
     null,
     fromArmeriaHttpHeaders(req.headers()));
  this.ctx = requireNonNull(ctx, "ctx");
  this.req = req;
  body = Flux.from(req).cast(HttpData.class).map(factoryWrapper::toDataBuffer)
        // Guarantee that the context is accessible from a controller method
        // when a user specify @RequestBody in order to convert a request body into an object.
        .publishOn(Schedulers.fromExecutor(ctx.contextAwareExecutor()));
}

代码示例来源:origin: line/armeria

@Override
protected HttpResponse doPost(ServiceRequestContext ctx, HttpRequest req) throws Exception {
  final MediaType contentType = req.headers().contentType();
  final SerializationFormat serializationFormat = findSerializationFormat(contentType);
  if (serializationFormat == null) {
  final String timeoutHeader = req.headers().get(GrpcHeaderNames.GRPC_TIMEOUT);
  if (timeoutHeader != null) {
    try {
      methodName, method, ctx, req.headers(), res, serializationFormat);
  if (call != null) {
    ctx.setRequestTimeoutHandler(() -> call.close(Status.DEADLINE_EXCEEDED, EMPTY_METADATA));
    req.subscribe(call.messageReader(), ctx.eventLoop(), true);
    req.completionFuture().handleAsync(call.messageReader(), ctx.eventLoop());

代码示例来源:origin: line/armeria

private boolean handleEarlyCancellation(ClientRequestContext ctx, HttpRequest req,
                    DecodedHttpResponse res) {
  if (res.isOpen()) {
    return false;
  }
  // The response has been closed even before its request is sent.
  assert protocol != null;
  req.abort();
  ctx.logBuilder().startRequest(channel, protocol);
  ctx.logBuilder().requestHeaders(req.headers());
  req.completionFuture().handle((unused, cause) -> {
    if (cause == null) {
      ctx.logBuilder().endRequest();
    } else {
      ctx.logBuilder().endRequest(cause);
    }
    return null;
  });
  res.completionFuture().handle((unused, cause) -> {
    if (cause == null) {
      ctx.logBuilder().endResponse();
    } else {
      ctx.logBuilder().endResponse(cause);
    }
    return null;
  });
  return true;
}

代码示例来源:origin: line/armeria

@Override
public HttpResponse serve(ServiceRequestContext ctx, HttpRequest req) throws Exception {
  final HttpHeaders clientHeaders = req.headers();
  final MediaType contentType = clientHeaders.contentType();
  if (contentType == null) {
  req.aggregateWithPooledObjects(ctx.eventLoop(), ctx.alloc()).handle((clientRequest, t) -> {
    if (t != null) {
      responseFuture.completeExceptionally(t);

代码示例来源:origin: line/armeria

final HttpHeaders headers = httpRequest.headers();
assertThat(headers.method()).isEqualTo(com.linecorp.armeria.common.HttpMethod.GET);
assertThat(headers.path()).isEqualTo(TEST_PATH_AND_QUERY);
assertThat(headers.get(HttpHeaderNames.COOKIE)).isEqualTo("a=1");
assertThat(httpRequest.completionFuture().isDone()).isFalse();
      .verify();
await().until(() -> httpRequest.completionFuture().isDone());

代码示例来源:origin: line/armeria

@Test
public void cancel() {
  final HttpRequest httpRequest =
      HttpRequest.of(HttpHeaders.of(HttpMethod.POST, "/"),
              Flux.just("a", "b", "c", "d", "e")
                .map(HttpData::ofUtf8));
  final ServiceRequestContext ctx = newRequestContext(httpRequest);
  final ArmeriaServerHttpRequest req = request(ctx);
  assertThat(httpRequest.completionFuture().isDone()).isFalse();
  final Flux<String> body = req.getBody().map(TestUtil::bufferToString);
  StepVerifier.create(body, 1)
        .expectNext("a").thenRequest(1)
        .expectNext("b").thenRequest(1)
        .thenCancel()
        .verify();
  final CompletableFuture<Void> f = httpRequest.completionFuture();
  assertThat(f.isDone()).isTrue();
  assertThat(f.isCompletedExceptionally()).isTrue();
  assertThatThrownBy(f::get).isInstanceOf(ExecutionException.class)
               .hasCauseInstanceOf(CancelledSubscriptionException.class);
}

代码示例来源:origin: line/armeria

@Override
public HttpResponse serve(ServiceRequestContext ctx, HttpRequest req) throws Exception {
  final SamlServiceFunction func = serviceMap.get(req.path());
  if (func == null) {
    return HttpResponse.of(HttpStatus.BAD_REQUEST);
  }
  final CompletionStage<AggregatedHttpMessage> f;
  if (portConfigHolder.isDone()) {
    f = req.aggregate();
  } else {
    f = portConfigHolder.future().thenCompose(unused -> req.aggregate());
  }
  return HttpResponse.from(f.handle((msg, cause) -> {
    if (cause != null) {
      return HttpResponse.of(HttpStatus.BAD_REQUEST);
    }
    final SamlPortConfig portConfig = portConfigHolder.config().get();
    if (portConfig.scheme().isTls() != ctx.sessionProtocol().isTls()) {
      return HttpResponse.of(HttpStatus.BAD_REQUEST);
    }
    // Use user-specified hostname if it exists.
    // If there's no hostname set by a user, the default virtual hostname will be used.
    final String defaultHostname = firstNonNull(sp.hostname(), ctx.virtualHost().defaultHostname());
    return func.serve(ctx, msg, defaultHostname, portConfig);
  }));
}

代码示例来源:origin: line/armeria

@Override
public String getMethodValue() {
  return req.method().name();
}

代码示例来源:origin: line/armeria

req.aggregate().handle((aReq, cause) -> {
  if (cause != null) {
    logger.warn("{} Failed to aggregate a request:", ctx, cause);
    final ArmeriaHttpTransport transport = new ArmeriaHttpTransport(req.method());
    final HttpChannel httpChannel = new HttpChannel(
        connector,

代码示例来源:origin: line/armeria

private HttpResponse execute(@Nullable EventLoop eventLoop, HttpRequest req) {
  final String concatPaths = concatPaths(uri().getRawPath(), req.path());
  req.path(concatPaths);
  final PathAndQuery pathAndQuery = PathAndQuery.parse(concatPaths);
  if (pathAndQuery == null) {
    req.abort();
    return HttpResponse.ofFailure(new IllegalArgumentException("invalid path: " + concatPaths));
  }
  return execute(eventLoop, req.method(), pathAndQuery.path(), pathAndQuery.query(), null, req,
          (ctx, cause) -> {
            if (ctx != null && !ctx.log().isAvailable(RequestLogAvailability.REQUEST_START)) {
              // An exception is raised even before sending a request, so abort the request to
              // release the elements.
              req.abort();
            }
            return HttpResponse.ofFailure(cause);
          });
}

代码示例来源:origin: line/armeria

private static boolean isValidPath(HttpRequest req) {
  return PathAndQuery.parse(req.path()) != null;
}

代码示例来源:origin: line/armeria

ctx.logBuilder().serializationFormat(serializationFormat);
ctx.logBuilder().deferRequestContent();
req.aggregateWithPooledObjects(ctx.eventLoop(), ctx.alloc()).handle((aReq, cause) -> {
  if (cause != null) {
    final HttpResponse errorRes;

代码示例来源:origin: line/armeria

private Supplier<Mono<Void>> execute(Supplier<HttpRequest> supplier) {
  return () -> Mono.defer(() -> {
    assert request == null : request;
    request = supplier.get();
    future.complete(client.execute(request));
    return Mono.fromFuture(request.completionFuture());
  });
}

代码示例来源:origin: com.linecorp.armeria/armeria-grpc

@Override
protected HttpResponse doPost(ServiceRequestContext ctx, HttpRequest req) throws Exception {
  final MediaType contentType = req.headers().contentType();
  final SerializationFormat serializationFormat = findSerializationFormat(contentType);
  if (serializationFormat == null) {
  final String timeoutHeader = req.headers().get(GrpcHeaderNames.GRPC_TIMEOUT);
  if (timeoutHeader != null) {
    try {
      methodName, method, ctx, req.headers(), res, serializationFormat);
  if (call != null) {
    ctx.setRequestTimeoutHandler(() -> call.close(Status.DEADLINE_EXCEEDED, EMPTY_METADATA));
    req.subscribe(call.messageReader(), ctx.eventLoop(), true);
    req.completionFuture().handleAsync(call.messageReader(), ctx.eventLoop());

代码示例来源:origin: line/armeria

private void doExecute0(ClientRequestContext ctx, HttpRequestDuplicator rootReqDuplicator,
            HttpRequest originalReq, HttpResponse returnedRes,
            CompletableFuture<HttpResponse> future, boolean hasInitialAuthority) {
  if (originalReq.completionFuture().isCompletedExceptionally() || returnedRes.isComplete()) {
      duplicateReq.abort();
    duplicateReq.headers().remove(HttpHeaderNames.AUTHORITY);

相关文章