无法POST到REST API

时间:2015-02-25 17:34:52

标签: android spring security rest

今天我第一次尝试发送带有JSON的POST请求来保存一些数据,而我却无法这样做。 我的应用程序通过登录,然后保存,修改和删除数据。它已经在iOS中完成了,但由于我是Android新手,我不知道该怎么做。 这是我的POST功能:

public String POST(String targetURL, String urlParameters, String user, String pwd) {
        URL url;
        String u = targetURL;

        HttpURLConnection connection = null;
        try {
            // Create connection
            // u=URLEncoder.encode(u, "UTF-8");
            url = new URL(u);
            connection = (HttpURLConnection) url.openConnection();
            // cambiarlo luego al usuario q esta logeado
            String login = user + ":" + pwd;
            String encoding = new String(org.apache.commons.codec.binary.Base64.encodeBase64(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(login)));

            connection.setRequestMethod("POST");

            connection.setRequestProperty("Authorization", "Basic " + encoding);
            connection.setRequestProperty("Content-Type", "plain/text");// hace q sirva con el string de json

            connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
            connection.setRequestProperty("Content-Language", "en-US");

            connection.setUseCaches(false);
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setReadTimeout(120000);
            // Send request
            DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
            wr.writeBytes(urlParameters);
            wr.flush();
            wr.close();

            // Get Response
            InputStream is = connection.getInputStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(is));
            String line;
            StringBuffer response = new StringBuffer();
            this.setResponseCode(connection.getResponseCode());
            while ((line = rd.readLine()) != null) {
                response.append(line);
                response.append('\r');
            }
            rd.close();
            return response.toString();

        } catch (Exception e) {

            e.printStackTrace();
            return null;

        } finally {

            if (connection != null) {
                connection.disconnect();
            }
        }
    }

上面的方法是使用Asynctask执行的,即使我使用它来使用Spring安全性登录,它也可以工作,甚至我可以为内部使用保存用户名,密码和密钥令牌。 我不知道如果我需要将标记放在标题或其他内容中,因为我已经这样做了,没有任何积极的结果。 我想我执行此操作所需的唯一权限是互联网权限,因此在我的清单文件中我指定了该权限。 我对这个问题发疯了,请帮忙! 提前谢谢。

修改

对不起,伙计们,我对这种提问方式有点新意,而且还不是英语母语人士:P 我发送请求后收到的输出是处理登录到Web应用程序的页面的HTML ...我需要像json响应或类似的东西来确保请求被正确保存

1 个答案:

答案 0 :(得分:0)

尝试处理您的Cookie

CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);

这应该是一个单身人士。