0

I'm trying to send cookies to the server, but it doesn't work. Please tell me thats wrong. Here is my code. At first, I take cookie in the POST request.

> Map <String, List<String>> headerFields = postRequest.getHeaderFields();
> List<String> cookiesHeader = headerFields.get("Set-Cookie");

Later, in the GET request, i'm send cookie to the server.

getRequest.setRequestProperty("Cookie", cookiesHeader.toString());

Help me. I'm beginner, not judge strictly.

Here all my code.

@Override
    protected String doInBackground(Void... params) {
        Log.i(TAG, "doInBackground");
        String store_id = "";
        final String COOKIES_HEADER = "Set-Cookie";
        final String COOKIE = "Cookie";
                try {
            Thread.sleep(4000);
                    Log.i(TAG, "httpRequest start");
                    String parametrs = mPhone.getText().toString();
                    String parametrs2 = mPass.getText().toString();
                    JSONObject allParams = new JSONObject();
                    HttpURLConnection postRequest = null;
                    InputStream inputStream = null;
                    byte[] data = null;

                try {
                    URL serverUrl = new URL("https://api.fianitlombard.ru/mobile/auth");
                    postRequest = (HttpURLConnection) serverUrl.openConnection();
                    postRequest.setReadTimeout(10000 /* milliseconds */);
                    postRequest.setConnectTimeout(15000 /* milliseconds */);
                    postRequest.setRequestMethod("POST");
                    postRequest.setDoInput(true);
                    postRequest.setDoOutput(true);
                    postRequest.setRequestProperty("Content-Type", "application/json; charset=utf-8");
                    postRequest.connect();

                allParams.put("phone", parametrs);
                allParams.put("password", parametrs2);
                Log.i(TAG, "allParams" + allParams);

                OutputStream bos = (postRequest.getOutputStream());
                bos.write(allParams.toString().getBytes());

                String helpInfo = postRequest.getResponseMessage();
                Log.i(TAG, "helpInfo =" + helpInfo);

                responseCode = postRequest.getResponseCode();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();

                Map<String, List<String>> headerFields = postRequest.getHeaderFields();
                List<String> cookiesHeader = headerFields.get(COOKIES_HEADER);

                    if (responseCode == 200) {
                        inputStream = postRequest.getInputStream();
                        byte[] buffer = new byte[8192]; // Такого вот размера буфер
                        // Далее, например, вот так читаем ответ
                        int bytesRead;
                        while ((bytesRead = inputStream.read(buffer)) != -1) {
                            baos.write(buffer, 0, bytesRead);
                        }
                        data = baos.toByteArray();
                        resultString = new String(data, "UTF-8");
                        Log.i(TAG, "responseCode = " + responseCode);
                        Log.i(TAG, "resultCode = " + resultString);

                        JSONObject jsonObject = new JSONObject(resultString);
                        store_id = jsonObject.getString("store_id");
                        Log.i(TAG, "store_id =" + store_id);
                        bos.close();
                        baos.close();
                        postRequest.disconnect();


                    }
                    if (responseCode == 403) {
                        Log.i(TAG, "responseCode = " + responseCode);
                    }

                    HttpURLConnection getRequest = null;
                    try {
                        URL serverUrl1 = new URL("https://api.fianitlombard.ru/mobile/checksession?version=1.0.8");
                        URI uri = URI.create("https://api.fianitlombard.ru/mobile/checksession?version=1.0.8");
                        getRequest = (HttpURLConnection) serverUrl1.openConnection();
                        getRequest.setReadTimeout(20000 /* milliseconds */);
                        getRequest.setConnectTimeout(25000 /* milliseconds */);
                        getRequest.setRequestMethod("GET");
                        getRequest.setRequestProperty("Content-Type", "application/json; charset=utf-8");
                        getRequest.setRequestProperty(COOKIE, cookiesHeader.toString());


                Log.i(TAG, "Cookie = " + cookiesHeader.toString());
                getRequest.connect();

                int responceGetCode = getRequest.getResponseCode();
                String responceGetInfo = getRequest.getResponseMessage();
                Log.i(TAG, "responceGetCode = " + responceGetCode);
                Log.i(TAG, "responceGetInfo = " + responceGetInfo);

                    if (responceGetCode == 200) {
                        //Все хорошо
                    }
                    if (responceGetCode == 400) {
                        // Устарела версия, нужно обновление
                    }
                    if (responceGetCode == 403) {
                        //Проблемы с авторизацией
                    } else {
                        //Что то другое.
                    }

                    } catch (IOException e) {
                    e.printStackTrace();

                    } finally {

                        if (getRequest != null)
                        getRequest.disconnect();
                    }

                    } catch (IOException e1) {
                e1.printStackTrace();
                         }
                    if (postRequest != null) {
                postRequest.disconnect();
                    }
                Log.i(TAG, "httpRequest end");

                    }
                     catch (InterruptedException | JSONException e) {
                     e.printStackTrace();
                    }

                     return store_id;
                    }
BlowJohan
  • 41
  • 5
  • 1
    Try [this](http://stackoverflow.com/questions/16150089/how-to-handle-cookies-in-httpurlconnection-using-cookiemanager) – Vüsal Jan 19 '17 at 11:44

3 Answers3

0

try to use the following method to get the cookie :

String getHeaderField("Set-Cookie")

you set the cookie by using the lists toString method, which will not give you the current cookie representation, but instead a string matching "[var1, var2, var3]"

0

The server sends the following in its response header to set a cookie field.

Set-Cookie:name=value

If there is a cookie set, then the browser sends the following in its request header.

Cookie:name=value

See the HTTP Cookie article at Wikipedia for more information.

0

change below line

getRequest.setRequestProperty(COOKIE, cookiesHeader.toString());

to

getRequest.setRequestProperty( COOKIE, cookiesHeader.get( 0 ) );

toString() method of List will return the hashCode() but not the actual values of List

Ravi MCA
  • 2,491
  • 4
  • 20
  • 30