我有一个HttpUriRequest实例,有没有办法打印它包含的所有参数?例如,我几乎可以得到它们:
HttpUriRequest req = ...;
HttpParams params = req.getParams();
for (int i = 0; i < params.size(); i++) { // ?
println(params.getParam(i); // ?
}
有办法做到这一点吗?
由于
答案 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¶m2=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 寻找可能的解决方案