java.net.http.HttpResponse.BodyHandlers#java.net.http.HttpRequest.BodyPublisher源码实例Demo

下面列出了java.net.http.HttpResponse.BodyHandlers#java.net.http.HttpRequest.BodyPublisher 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

/**
 * Build the body for the request builder. Handling compression type of the request.
 *
 * @param builder Request Builder
 * @param algoliaRequest HttpClient agnostic Algolia's request
 */
private BodyPublisher buildRequestBody(
    @Nonnull Builder builder, @Nonnull HttpRequest algoliaRequest) {

  if (algoliaRequest.getBody() == null) {
    return java.net.http.HttpRequest.BodyPublishers.noBody();
  }

  if (algoliaRequest.canCompress()) {
    builder.header(Defaults.CONTENT_ENCODING_HEADER, Defaults.CONTENT_ENCODING_GZIP);
  } else {
    builder.header(Defaults.CONTENT_TYPE_HEADER, Defaults.APPLICATION_JSON);
  }

  return BodyPublishers.ofInputStream(algoliaRequest::getBody);
}
 
源代码2 项目: catnip   文件: MultipartBodyPublisher.java
public BodyPublisher build() {
    if(partsSpecificationList.isEmpty()) {
        throw new IllegalStateException("Must have at least one part to build multipart message.");
    }
    addFinalBoundary();
    return BodyPublishers.ofByteArrays(PartsIterator::new);
}
 
/**
 * Builds an http request from an AlgoliaRequest object
 *
 * @param algoliaRequest The Algolia request object
 */
private java.net.http.HttpRequest buildRequest(@Nonnull HttpRequest algoliaRequest) {
  java.net.http.HttpRequest.Builder builder = java.net.http.HttpRequest.newBuilder();

  buildHeaders(builder, algoliaRequest.getHeaders());
  buildURI(builder, algoliaRequest.getUri());
  builder.timeout(Duration.ofMillis(algoliaRequest.getTimeout()));

  BodyPublisher body = buildRequestBody(builder, algoliaRequest);
  builder.method(algoliaRequest.getMethod().toString(), body);

  return builder.build();
}
 
源代码4 项目: catnip   文件: AbstractRequester.java
protected void executeHttpRequest(@Nonnull final Route route, @Nullable final BodyPublisher body,
                                  @Nonnull final QueuedRequest request, @Nonnull final String mediaType) {
    final HttpRequest.Builder builder;
    final String apiHostVersion = catnip.options().apiHost() + "/api/v" + catnip.options().apiVersion();
    
    if(route.method() == GET) {
        // No body
        builder = HttpRequest.newBuilder(URI.create(apiHostVersion + route.baseRoute())).GET();
    } else {
        final var fakeBody = request.request.emptyBody();
        builder = HttpRequest.newBuilder(URI.create(apiHostVersion + route.baseRoute()))
                .setHeader("Content-Type", mediaType)
                .method(route.method().name(), fakeBody ? BodyPublishers.ofString(" ") : body);
        if(fakeBody) {
            // If we don't have a body, then the body param is null, which
            // seems to not set a Content-Length. This explicitly tries to set
            // up a request shaped in a way that makes Discord not complain.
            catnip.logAdapter().trace("Set fake body due to lack of body.");
        }
    }
    
    // Required by Discord
    builder.setHeader("User-Agent", "DiscordBot (https://github.com/mewna/catnip, " + CatnipMeta.VERSION + ')');
    // Request more precise ratelimit headers for better timing
    // NOTE: THIS SHOULD NOT BE CONFIGURABLE BY THE END USER
    // This is pretty important for getting timing of things like reaction
    // routes correct, so there's no use for the end-user messing around
    // with this.
    // If they REALLY want it, they can write their own requester.
    builder.setHeader("X-RateLimit-Precision", "millisecond");
    
    if(request.request().needsToken()) {
        builder.setHeader("Authorization", "Bot " + catnip.options().token());
    }
    if(request.request().reason() != null) {
        catnip.logAdapter().trace("Adding reason header due to specific needs.");
        builder.header(Requester.REASON_HEADER, Utils.encodeUTF8(request.request().reason()));
    }
    
    // Update request start time as soon as possible
    // See QueuedRequest docs for why we do this
    request.start = System.nanoTime();
    catnip.options().httpClient().sendAsync(builder.build(), BodyHandlers.ofString())
            .thenAccept(res -> {
                final int code = res.statusCode();
                final String message = "Unavailable to due Java's HTTP client.";
                final long requestEnd = System.nanoTime();
                
                catnip.rxScheduler().scheduleDirect(() ->
                        handleResponse(route, code, message, requestEnd, res.body(), res.headers(), request));
            })
            .exceptionally(e -> {
                request.bucket.failedRequest(request, e);
                return null;
            });
}
 
源代码5 项目: demo-java-x   文件: ReactivePost.java
private LoggingBodyPublisher(BodyPublisher publisher) {
	this.publisher = publisher;
}