3

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

他の誰かが同様の問題を抱えていましたが(HttpParams / HttpUriRequestの内容を出力しますか?)、答えは実際には機能しません。

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

事前定義されたキー名に頼ることはできないので、理想的な方法は、HttpParamsカプセル化されたすべてのエントリを反復処理することです。または、少なくともキー名のリストを取得します。私は何が欠けていますか?

4

4 に答える 4

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)
{
}
于 2012-07-09T11:21:28.590 に答える
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"); 
}
于 2012-02-21T15:16:27.873 に答える
0

BasicHttpParamsへのキャストを介してすべてのHttpParamを表示するソリューションの構築を完了したかった

HttpParams params = //Construction of params not shown

BasicHttpParams basicParams = (BasicHttpParams) params;
Set<String> keys = basicParams.getNames();

for (String key : keys) {
    System.out.println("[Key]:" + key + " [Value]:" + basicParams.getParameter(key));
}
于 2019-08-21T22:59:48.713 に答える
-1

これを使用してパラメータを設定します。

HttpGet get = new HttpGet(url);
get.setHeader("Content-Type", "text/html");
get.getParams().setParameter("http.socket.timeout",20000);
于 2012-03-02T02:01:21.027 に答える