打印HttpParams / HttpUriRequest的内容?

时间:2011-02-28 17:46:22

标签: java httpclient

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

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

有办法做到这一点吗?

由于

4 个答案:

答案 0 :(得分:3)

您可以简单地遍历所有标题字段。

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 :(得分: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));
}

答案 2 :(得分:0)

HttpUriRequest扩展了HttpMessage,它有getAllHeaders(),getParams()等。

看看这里:http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/index.html,搜索HttpMessage

答案 3 :(得分:0)

您可以通过将其强制转换为BasicHttpParams对象来创建解决方案。

BasicHttpParams basicParams = (BasicHttpParams) params;

这使您可以访问getNames(),其中包含HashSet<String>个参数

然后您可以遍历它,并在其值旁边打印出参数名称。

请参阅 https://stackoverflow.com/a/57600124/5622596 寻找可能的解决方案