過去数時間取り組んできた問題があり、一生解決できないようです。
httppost エンティティにデータを追加して、サーバーにユーザーをログインさせるアプリケーションがあります。初めてデータがエンティティに追加されると、すべて正常に機能します。ポスト リクエストがサーバーに 2 回送信されると、クライアントはタイムアウトになるまでハングします。
DefaultHttpClient はアプリケーションにグローバル変数として格納され、load_client() が呼び出されたときにクラスにロードされます。ペア変数に何もない場合はすべて機能しますが、ペア変数が setEntity で 2 回目に設定されると、プログラムは「応答受信」メッセージに到達しません。
httppost = new HttpPost(format_url(base_url,controller));
logger.info("Sending Post Request");
load_client();
try {
logger.info("Setting Entity");
httppost.setEntity(new UrlEncodedFormEntity(pairs,"UTF-8"));
for(NameValuePair pair : pairs){
logger.info(pair.getName() + " : " + pair.getValue());
}
logger.info("URL Encoded");
response = httpclient.get_client().execute(httppost);
logger.info("Received response");
HttpEntity entity = response.getEntity();
StatusLine statusLine = response.getStatusLine();
logger.info("Status: " + statusLine.toString());
is = entity.getContent();
logger.info("Content: " + is.toString());
}catch(Exception e){
logger.error("Error in http connection "+e.toString());
}
どんな助けでも大歓迎です。Post リクエストを行うたびに、古いクライアントの Cookie を保存し、新しいオブジェクトをアプリケーションに渡す以外に、この時点で何をすべきか本当にわかりません。それは問題を解決するための悪い方法のようです。
編集: クライアントがタイムアウトした後のメッセージは次のとおりです。投稿リクエストにデータがない場合はスローされません。
Error in http connection org.apache.http.NoHttpResponseException: The target server failed to respond
編集: わかりました、このバグを 1 行に絞り込みました。
DefaultHttpClient defhttpClient = new DefaultHttpClient();
logger.info("URL Encoded");
//When I pass the cookies things stop working...
//defhttpClient.setCookieStore(httpclient.get_cookies());
response = defhttpClient.execute(httppost);
logger.info("Received response");
新しい DefaultHttpClient を作成し、パラメーターを指定してポスト リクエストを実行すると、クライアントはサーバーと問題なく通信できます。唯一の問題は、現在のユーザーが誰であるかをサーバーに伝えるために、古いクライアントからの Cookie が必要なことです。古いクライアントから Cookie を取得して新しいクライアントに渡すと、アプリケーションがハングします。サーバーにリクエストが来ることすらありません。これについては、新しい記事を作成する必要があるかもしれないと思います...