2016-05-04 1 views
0

ここに内部Webサーバーと通信するAndroidアプリがあります。 これまでのところ、私はログイン活動と、繰り返し作業をするのに役立つ別のアクティビティを持っています。Android SDKのHttpURLConnectionセッションを再利用するために正しくCookieを与えるASPページ23

私は正常にログインでき、セッションIDのCookieを文字列に格納できます。私は文字列がインテントを通して次のアクティビティに正しく渡されることを確認しました。また、次のアクティビティでクッキーが受信されたことを確認しました。

しかし、このクッキーをsetRequestPropertyを介してWebサーバーに渡そうとすると、サーバーはそれを使用していないように見えます。私のアプリが要求されたURLを読むとき、それはリダイレクトされ、クッキーが動作しなかったことを意味するログインページを取得するだけです。私はエラーゼロを受け取る。

私はWebサイトの作成者と話をしました。彼はHTTPヘッダーのカスタム処理をしておらず、スクリプトのすべてがセッション変数を利用しており、ASPはセッションを独自に管理しています。彼はウェブサイトがクッキーによってセッションIDと価値を設定していることを知らなかったので、ASPが自動的にそれをやっているとわかった。このサイトは、何年もWebブラウザーを介して機能してきましたが、私はそれを特定の機能をアプリに移植しようとしています。

私は何が間違っているのか分かりません。

private class GetURLContent extends AsyncTask<URL, Integer, String> { 
    @Override 
    protected void onPostExecute(String result) { 
     setData(result); 
    } 
    protected String doInBackground(URL... url) { 

     String pageText = ""; 
     String charset = "UTF-8"; 
     String SessionCookie = "No SessionCookie passed."; 
     Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      SessionCookie = extras.getString("SessionCookie"); 
     } 
     try { 

      URL ThisURL = new URL(url[0].toString()); 
      HttpURLConnection ThisConnection = (HttpURLConnection) ThisURL.openConnection(); 
      ThisConnection.setRequestMethod("GET"); 
      ThisConnection.setRequestProperty("Host","technology.fergflor.k12.mo.us"); 
      ThisConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"); 
      ThisConnection.setRequestProperty("Connection","keep-alive"); 
      ThisConnection.setRequestProperty("Cookie",SessionCookie); 
      ThisConnection.connect(); 

      // wrap the urlconnection in a bufferedreader 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(ThisConnection.getInputStream())); 
      String line; 

      //read from the urlconnection via the bufferedreader 
      while ((line = bufferedReader.readLine()) != null) 
      { 
       pageText = pageText + line + "\n"; 
      } 
      bufferedReader.close(); 
      pageText = SessionCookie + "\n" + pageText; 

     } catch (MalformedURLException e) { 
      pageText = "MalformedURLException Error Message=\"" + e.getMessage() + "\" " + pageText; 
     } catch (IOException e2) { 
      pageText = "IOException Error Message=\"" + e2.getMessage() + "\" " + pageText; 
     } catch (NullPointerException e3) { 
      pageText = "NullPointerException Error Message=\"" + e3.getMessage() + "\" " + pageText; 
     } 
     return pageText; 
    } 
} 

ここで設定要求のプロパティのすべてが、以前の活動に使用したものと同一のクラスログイン:ここにURLを読み取り、クッキーや他のHTTPヘッダーフィールドを設定するコードの塊です。私は両方のアクティビティでHttpURLConnectionを使用しています。

目的は、このクラスを使用して、以前のログインアクティビティから確立されたセッションを再利用し、Webページを取得するためのCookieを提供することです。私は何がうまくいかないのか分からない。

答えて

0

API < 23でうまく動作していたコードに非常によく似た問題がありました。23 APIでは、ログインページにリダイレクトされました。ソリューションは、このコード行を追加することでした:

ThisConnection.setInstanceFollowRedirects(false); 
関連する問題