(GET http请求)如何在服务器

时间:2017-01-19 11:39:52

标签: java android http cookies

我正在尝试将Cookie发送到服务器,但它不起作用。请告诉我那是错的。这是我的代码。 首先,我在POST请求中使用cookie。

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

稍后,在GET请求中,我将cookie发送到服务器。

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

帮帮我。我是初学者,不是严格判断。

这是我的所有代码。

@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;
                    }

3 个答案:

答案 0 :(得分:0)

尝试使用以下方法获取cookie:

String getHeaderField("Set-Cookie")

你使用list toString方法设置cookie,它不会给你当前的cookie表示,而是一个字符串匹配&#34; [var1,var2,var3]&#34;

答案 1 :(得分:0)

服务器在其响应标头中发送以下内容以设置cookie字段。

设置Cookie:名称=值

如果设置了cookie,则浏览器会在其请求标头中发送以下内容。

的Cookie:名称=值

有关详细信息,请参阅Wikipedia上的HTTP Cookie文章。

答案 2 :(得分:0)

更改行

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

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

toString()方法将返回hashCode()但不返回List的实际值