2014-02-26 127 views
25

我正在使用apache-httpclient-4.3。我会分析一个http请求,特别是查询字符串参数,但是HttpClient.getParams()已弃用。我应该用什么来代替?

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

我不确定明白这是什么意思。我应该使用某些配置API的构造函数参数(那是什么?HostConfiguration不再可用作类)。

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

我无法找到一个方法来读回参数从我请求对象(VAR1,VAR2)不使用不推荐使用:但在施工阶段我直接通过URL传递的查询参数方法,这应该很简单,以便从对象中获取属性。

+0

感谢您的评论,但正如我所说,我不明白这些信息的含义。我不知道如何检索“配置API的构造函数参数”。 通过你的评论我明白这是一个非常简单的操作,你能否提供一个简短的例子来说明从哪里开始? – donnadulcinea

+0

那么,当你遵循Javadoc时,这很简单,是的;然而,你似乎在混合的东西 - 'HttpParams' _does not_返回查询字符串的任何内容。 – fge

回答

26

您可以使用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(); 

我觉得你是一个有点困惑来自客户端的getParams()方法或列举HTTPMethod,getParams()不会返回URL参数或类似的东西,返回客户端parameteres例如连接超时,代理,cookies ......等

在4.3.2之前,您可以使用getParams()方法(现在不推荐使用)将参数设置为客户端,在4.3.2之后,您可以通过RequestConfig类设置请求参数使用Builder

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(); 
+0

谢谢@vzamanillo。这很明显。所以参数只能由你创建才能访问。你认为这是一个好方法吗? 我的意思是,假设我从第三部分收到HttpGet对象,只是HttpGet对象:在这种情况下,我无法以简单的方式访问查询字符串参数? – donnadulcinea

+0

您可以使用URIBuilder访问URI参数,请阅读更新的帖子。 – vzamanillo

相关问题