2011-02-28 115 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)); 
}