2012-02-21 2 views
2

HttpParams 개체의 모든 항목을 반복하는 방법이 있습니까?HttpParams의 모든 항목에 액세스

다른 사람이 비슷한 문제 (Print contents of HttpParams/HttpUriRequest?)를 가지고 있지만 답변이 실제로 작동하지 않습니다.

BasicHttpParams을 보면 내부에 HashMap이 있지만 직접 액세스 할 수는 없습니다. 또한 AbstractHttpParams 은 모든 항목에 대한 직접 액세스를 제공하지 않습니다.

미리 정의 된 키 이름에 의존 할 수 없기 때문에 이상적인 방법은 모든 항목에 대해 HttpParams이 반복되는 것입니다. 또는 적어도 키 이름 목록을 얻으십시오. 내가 뭘 놓치고 있니?

답변

4

귀하의 HttpParams 다시 다음 코드

final HttpPost httpPost = new HttpPost("http://..."); 

final ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); 
params.add(new BasicNameValuePair("a_param", username)); 
params.add(new BasicNameValuePair("a_second_param", password)); 

// add the parameters to the httpPost 
HttpEntity entity; 
try 
{ 
    entity = new UrlEncodedFormEntity(params); 
    httpPost.setEntity(entity); 
} 
catch (final UnsupportedEncodingException e) 
{ 
    // this should never happen. 
    throw new IllegalStateException(e); 
} 
HttpEntity httpEntity = httpPost.getEntity(); 

try 
{ 
    List<NameValuePair> parameters = new ArrayList<NameValuePair>(URLEncodedUtils.parse(httpEntity)); 
} 
catch (IOException e) 
{ 
} 
를 사용 HttpEntity는 HttpEntityEnclosedRequestBase 객체에 설정하고 다음 목록을 가질 수 있습니다 만드는 데 사용됩니다
+0

나는 URI에서 매개 변수를 가져 오는 것과 비슷한 일을했다. (Groovy 스 니펫, 자바에서도 마찬가지다) : 'def uri = new URI ("https://www.yahoo.com?foo = bar ") List parameters = 새 ArrayList (URLEncodedUtils.parse (uri,"UTF-8 ")); parameters.each {parameter -> println parameter.name + ":"+ parameter.value}' HttpParams 객체를 사용하지 않고 요청 매개 변수를 해체 할 수있는 적절한 방법입니다. 네가 원하는 걸 정확히 알아. –

2

내부에 HashMap이 있고 그 매개 변수를 가져와야하는 경우 언제든지 리플렉션 사용을 강요 할 수 있습니다.

Class clazz = httpParams.getClass(); 

Field fields[] = clazz.getDeclaredFields(); 
System.out.println("Access all the fields"); 
for (int i = 0; i < fields.length; i++){ 
    System.out.println("Field Name: " + fields[i].getName()); 
    fields[i].setAccessible(true); 
    System.out.println(fields[i].get(httpParams) + "\n"); 
} 
+0

나는 어떻게 든 반사를 사용하는 것 외에 다른 방법이 있어야한다고 생각했습니다. HTTP 요청을 준비하기 위해'HttpParams' 객체가'HttpClient' 어딘가에서 처리되지 않았습니까? – Brian

-1
난 그냥에 Params를 설정하려면이 옵션을 사용

:

HttpGet get = new HttpGet(url); 
get.setHeader("Content-Type", "text/html"); 
get.getParams().setParameter("http.socket.timeout",20000); 
+1

그러나 나는'HttpRequest'에서 모든 매개 변수를 읽고 싶었습니다. 그래서 당신의 예제를 고수하고,'get.getParams()'로부터리스트를 얻으십시오. – Brian