不推荐使用HttpClient.getParams()。我应该用什么呢?

时间:2014-02-26 10:45:18

标签: java apache-httpclient-4.x

我正在使用apache-httpclient-4.3。我会分析一个http请求,特别是查询字符串参数,但是

@Deprecated
public HttpParams getParams()
Deprecated. (4.3) use constructor parameters of configuration API provided by HttpClient

我不确定这意味着什么。我应该使用一些配置API的构造函数参数(那是什么?HostConfiguration不再作为类提供)。但在构建阶段,我直接通过url传递查询参数:

HttpGet request = new HttpGet("http://example.com/?var1=value1&var2=value2");

我找不到从我的请求对象读回参数( var1,var2 )的方法,而不使用弃用的方法,这应该很简单来自对象的属性。

1 个答案:

答案 0 :(得分:31)

您可以使用URIBuilder对象

URIBuilder builder = new URIBuilder("http://example.com/");
builder.setParameter("var1", "value1").setParameter("var2", "value2");

HttpGet request = new HttpGet(builder.build());

// get back the url parameters   
List<NameValuePair> params = builder.getQueryParams();

我认为你对客户端或HttpMethod的getParams()方法有点困惑,getParams()没有返回URL参数或类似的东西,返回客户端参数,如连接超时,代理,饼干......等等。

在4.3.2之前,您可以使用getParams()方法(现在不建议使用)将参数设置到客户端,在4.3.2之后,您可以使用{{RequestConfig类通过Builder类设置请求参数1}}

Builder requestConfigBuilder = RequestConfig.custom();
requestConfigBuilder.setConnectionRequestTimeout(1000).setMaxRedirects(1);

然后只设置为HttpMethod(不像以前那样设置为客户端)

request.setConfig(requestConfigBuilder.build());

<强>更新

如果您想从HttpGetHttPost请求对象获取URI参数,可以同样方式使用URIBuilder

HttpGet request = new HttpGet("http://example.com/?var=1&var=2");

URIBuilder newBuilder = new URIBuilder(request.getURI());
List<NameValuePair> params = newBuilder.getQueryParams();