繁体   English   中英

如何给java.net.http.HttpClient GET请求添加参数?

[英]How to add parameters to java.net.http.HttpClient GET request?

我们发现以下示例有效:

import java.net.http.HttpClient;
:
private static final HttpClient httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1)
        .connectTimeout(Duration.ofSeconds(TIMEOUT)).build();
:
public String getStuff(HashMap<String,String> params) {
    HttpRequest request = HttpRequest.newBuilder().GET().uri(URI.create("https://httpbin.org/get"))
            .setHeader("User-Agent", "My Agent v1.0")
            .build();
    
    HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
   return response.body();
}

问题是我们如何将参数放入请求中? 我们可以通过字符串操作手动将它们放入 URI,但这不适用于 POST。

我们希望有一个类似于 setHeader 的 setParameter 方法,但这并不存在(至少根据 eclipse)。

现在我正在手动这样做:

    String uri = "http://Somesite.com/somepath";
    if (params != null) {
        uri += "?";
        for (String key : params.keySet()) {
            uri += "" + key + "=" + params.get(key);
          }
    }

    HttpRequest request = HttpRequest.newBuilder().GET().uri(URI.create(uri))
            .setHeader("User-Agent", agent)
            .build();

据推测,对于 POST,我必须手动构建一个具有 post params 结构的主体。

使用javax.ws.rs.core.UriBuilder它有queryParam方法。 例如:

UriBuilder.fromLink( Link.fromUri( "somehost" ).build() )
            .path( API_SERVICES )
            .queryParam( "path", path)
            .queryParam( "method", method )
            .build();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM