打印HttpParams / HttpUriRequest的内容?
我有一个HttpUriRequest实例,有没有办法打印它包含的所有参数? 例如,我几乎可以得到它们:
HttpUriRequest req = ...; HttpParams params = req.getParams(); for (int i = 0; i < params.size(); i++) { // ? println(params.getParam(i); // ? }
有没有办法做到这一点?
谢谢
您在寻找HTTP参数还是URI参数?
HTTP参数类似于用户代理,套接字缓冲区大小,协议版本等。
URI参数是作为请求的一部分传递的客户端值,例如
?param1=value1¶m2=value2
如果您正在寻找URI参数,请尝试以下方法:
List uriParams = Arrays.asList(request.getURI().getQuery().split("&"));
但是如果你确实需要原始HTTP参数,那就更复杂了,因为并非HttpParams的所有实现都支持getNames()
。 你必须做这样的事情:
HttpParamsNames params = (HttpParamsNames)request.getParams(); Set 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)); }
您可以简单地遍历所有标题字段。
HttpUriRequest req = ...; ....... Header[] headerFields = request.getAllHeaders(); for(int e = 0; e
建议的方法params.toString()不起作用。
HttpUriRequest扩展了HttpMessage,它有getAllHeaders(),getParams()等。
看看这里: http ://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/index.html,搜索HttpMessage
- HttpClient – Cookies – 和JEditorPane
- 如何在Java中以编程方式检查SSL证书到期日期
- Java NoSuchAlgorithmException – SunJSSE,sun.security.ssl.SSLContextImpl $ DefaultSSLContext
- 使用Apache HttpClient定义源IP地址
- 在Android应用中为HttpClient更改OpenSSL库
- HttpClient 4.2,基本身份validation和AuthScope
- HttpClient ThreadSafeClientConnManager抛出“连接重置”
- Solr – 使用Httpclient实例化HttpSolrServer
- 使用SSL加密和NTLM身份validation的HttpClient失败