2017-01-19 24 views
0

Cookieをサーバーに送信しようとしていますが、動作しません。それは間違っていると教えてください。ここに私のコードです。 まず、POSTリクエストでCookieを取得します。(GET httpリクエスト)サーバーにCookieを送信する方法

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

後で、GETリクエストで、私はサーバーにクッキーを送信します。

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

私を助けてください。私は初心者であり、厳密に判断するのではありません。

ここで私のコード。文字列の代わりに

String getHeaderField("Set-Cookie") 

あなたはあなたの現在のCookie表現を与えることはありませんリストの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; 
        } 
+1

の実際の値は、HTTP([この]を試してみてください(ハッシュコードを返します)ではなくなります://stackoverflow.com/questions/16150089/how-to-handle-cookies-in-httpurlconnection-using-cookiemanager) – Vusal

答えて

0

線の下の変更

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

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

へのtoString()メソッドは、リスト

+0

ありがとう、男!それは仕事です! –

0

試みは、クッキーを取得するには、次のメソッドを使用するには"[var1、var2、var3]"と一致する

0

サーバーは、応答ヘッダーで次の情報を送信してCookieフィールドを設定します。

のSet-Cookie:名前=値

クッキーのセットがある場合、ブラウザは、そのリクエストヘッダに以下を送信します。

クッキー:名前=値

は、より多くの情報のために、ウィキペディアのHTTPクッキーの記事を参照してください。リストの

関連する問題