2011-02-28 112 views
2

我有一个HttpUriRequest实例,有没有办法打印它包含的所有参数?例如,我几乎可以得到它们:打印HttpParams/HttpUriRequest的内容?

HttpUriRequest req = ...; 
HttpParams params = req.getParams(); 
for (int i = 0; i < params.size(); i++) { // ? 
    println(params.getParam(i); // ? 
} 

有没有办法做到这一点?

感谢

+0

在什么包是你的HttpUriRequest? – smas 2011-02-28 17:55:48

+0

import org.apache.http.client.methods.HttpUriRequest; – user291701 2011-02-28 17:57:16

回答

2

你可以简单地遍历所有头字段。

HttpUriRequest req = ...; 
....... 
Header[] headerFields = request.getAllHeaders(); 
for(int e = 0; e<header.length; e++){          
    System.out.println(headerFields[e].getName() + ": " + headerFields[e].getValue()); 
} 

建议的方法params.toString()不起作用。

+1

我相信用户要求参数不是标题。 – lorraine 2014-01-10 03:25:51

3

你在寻找HTTP参数还是URI参数?

的HTTP参数之类的东西的用户代理,插座缓冲区大小,协议版本,等等

的URI参数是得到作为请求的一部分,例如通过客户端值

?param1=value1&param2=value2 

如果你正在寻找的URI参数,尝试这样的事情:

List<String> uriParams = Arrays.asList(request.getURI().getQuery().split("&")); 

但是,如果你想在原始HTTP参数,可以是一个有点复杂,因为的HttpParams的并非所有的实现支持getNames()。你必须这样做:

HttpParamsNames params = (HttpParamsNames)request.getParams(); 
Set<String> names; 

if (params instanceof ClientParamsStack) { 
    names = new HashSet<>(); 

    // Sorted by priority, see ClientParamsStack 
    ClientParamsStack cps = (ClientParamsStack)params; 
    if (cps.getApplicationParams() != null) { 
     names.addAll(((HttpParamsNames)cps.getApplicationParams()).getNames()); 
    } 
    if (cps.getClientParams() != null) { 
     names.addAll(((HttpParamsNames)cps.getClientParams()).getNames()); 
    } 
    if (cps.getRequestParams() != null) { 
     names.addAll(((HttpParamsNames)cps.getRequestParams()).getNames()); 
    } 
    if (cps.getOverrideParams() != null) { 
     names.addAll(((HttpParamsNames)cps.getOverrideParams()).getNames()); 
    } 
} else { 
    names = params.getNames(); 
} 

for (String name : names) { 
    System.out.println(name + ": " + request.getParams().getParameter(name)); 
}