DefaultHttpClient在第二次发布请求后挂起(Android)

时间:2014-08-14 20:23:01

标签: android post url-encoding apache-commons-httpclient basicnamevaluepair

我有一个问题,我过去几个小时一直在努力,似乎无法解决我的生活。

我有一个应用程序将用户登录到我的服务器,并将一些数据添加到httppost实体。第一次将数据添加到实体时一切正常。第二次将任何发布请求发送到服务器时,客户端会挂起,直到超时。

我的DefaultHttpClient在我的应用程序中存储为全局变量,并在调用load_client()时加载到我的类中。当对变量中没有任何东西时,一切都有效,但是一旦第二次在setEntity中设置了对变量,程序就永远不会进入"响应接收"消息。

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());
}

任何帮助将不胜感激。除了保存旧客户端的cookie并在每次我想发布Post请求时将新对象传递给应用程序时,我真的不知道该做什么。这似乎是一个解决问题的坏方法。

编辑:这是客户端超时后的消息。当post请求中没有数据时,它永远不会被抛出。

Error in http connection org.apache.http.NoHttpResponseException: The target server failed to respond
编辑:好吧,我把这个错误缩小到一行。

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并使用参数运行post请求,客户端可以很好地与服务器通信。唯一的问题是我需要来自旧客户端的cookie告诉服务器当前用户是谁。当我从旧客户端获取cookie并将其提供给我的新客户端时,应用程序会挂起。我甚至没有看到请求进入我的服务器。我想我可能只需要为这个发一个新帖子......

1 个答案:

答案 0 :(得分:0)

好像有连接问题。以下链接有类似的问题,所以它可能有所帮助: org.apache.http.NoHttpResponseException: The target server failed to respond