2012-02-21 8 views
2

HttpParamsオブジェクトのすべてのエントリを反復処理する方法はありますか?HttpParamsのすべてのエントリにアクセス

他の人にも同様の問題(Print contents of HttpParams/HttpUriRequest?)がありましたが、回答が実際には機能しません。

BasicHttpParamsを見ると、内部にはHashMapがありますが、直接アクセスする方法はありません。またAbstractHttpParams は、すべてのエントリに直接アクセスすることはできません。

私はあらかじめ定義されたキー名に頼ることができないので、理想的なやり方はすべてのエントリのちょうどをカプセル化することです。または、少なくともキー名のリストを取得する。私は何が欠けていますか?

答えて

4

あなたHttpParams HttpEntityEnclosedRequestBaseオブジェクトに設定HttpEntityを作成するために使用されていて、その後、次のコード

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) 
{ 
} 
を使用してバックリストを持つことができます
+0

私は、URIからパラメータを取り除くだけで同様のことをしました(これはGroovyのスニペットですが、Javaでも同じです)。 '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

私は何らかの形で反射を使用する以外の方法が必要であると思いました。 'HttpParams'オブジェクトは' HttpClient'のどこかで処理されていません.HttpClientはHTTPリクエストを準備するためには削除される必要がありますか? – 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

関連する問題