commons httpclient - 将查询字符串参数添加到 GET/POST 请求

2022-08-31 11:57:53

我正在使用共享资源HttpClient对Spring servlet进行http调用。我需要在查询字符串中添加一些参数。所以我做以下事情:

HttpRequestBase request = new HttpGet(url);
HttpParams params = new BasicHttpParams();
params.setParameter("key1", "value1");
params.setParameter("key2", "value2");
params.setParameter("key3", "value3");
request.setParams(params);
HttpClient httpClient = new DefaultHttpClient();
httpClient.execute(request);

但是,当我尝试使用servlet中读取参数时

((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest().getParameter("key");

它返回空值。实际上,参数Map是完全空的。当我在创建 HttpGet 请求之前手动将参数附加到 url 时,这些参数在 servlet 中可用。当我使用附加了queryString的URL从浏览器点击servlet时也是如此。

这是什么错误?在 httpclient 3.x 中,GetMethod 有一个 setQueryString() 方法来附加查询字符串。4.x 中的等效项是什么?


答案 1

下面介绍如何使用 HttpClient 4.2 及更高版本添加查询字符串参数:

URIBuilder builder = new URIBuilder("http://example.com/");
builder.setParameter("parts", "all").setParameter("action", "finish");

HttpPost post = new HttpPost(builder.build());

生成的 URI 将如下所示:

http://example.com/?parts=all&action=finish

答案 2

如果要在创建请求后添加查询参数,请尝试将 强制转换为 .然后,您可以更改转换请求的 URI:HttpRequestHttpBaseRequest

HttpGet someHttpGet = new HttpGet("http://google.de");

URI uri = new URIBuilder(someHttpGet.getURI()).addParameter("q",
        "That was easy!").build();

((HttpRequestBase) someHttpGet).setURI(uri);

推荐