2011-07-09 15 views
0

ここにいくつかのポインタが必要です。基本的には、Webサーバーにログインするためのフォームを作成したことです。だから、レスポンスコードから私はwiresharkを通じて200のステータスコードを得ることができます。このブラウザのログインシステムの通常のパスはandroid with cookie

パスワード+ id> index.php>(trueの場合)> index2.phpですが、アンドロイドアプリでは明らかにリダイレクトされませんが、そう思う?私はJsoup.connect(URL).cookie(私はなぜ、常にnullであるかわからないsessionid)を使用してみました。しかし、それはいつもヌルなので、うまくいきません。クッキーヘッダーが正しい場合は "PHPSESSID = somenumiericavalue"か、wiresharkから間違ったことを見ていますか?もう1つは、私が言ったように、私はJsoup.connectメソッドとHttpURLConnectionを使ってみたが、Android HTTP login questionsに従っているが、ヘッダと値をチェックする必要がある部分については、

if(response.getStatusLine().getStatusCode() == 200){ 
         HttpEntity entity = response.getEntity(); 
         Log.d("login", "success!"); 
         if(entity != null){ 
         cookies = client.getCookieStore(); 

ポンペは、いくつかのより多くのものを行うと言うとき、私はここに迷ってしまいました。絶対にここに失われた。他の部分は、それがwiresharkのを使用して次の部分である。あまりにも失った。:(

答えて

0

クッキーは一般のHttpClientによって処理されなければなりません正確には、実際のリクエストに使用するものと同じHttpClientインスタンスを使用するだけで、すべてのリクエストにわたってクッキーを維持する必要があります。たとえば、これは私が使用する特定のログインシーケンスです。 Locatiリダイレクトを成功のシンボルとして使用しますが、代わりに200 OKのステータス行を使用できます。これがtrueを返す場合、HttpClientインスタンスのCookieストアsessionに適切なCookieがあり、保護されたURLにアクセスできます。

public synchronized boolean login() throws Exception 
    { 
    HttpGet httpget; 
    HttpPost httpost = new HttpPost(base + "auth/login"); 
    List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
    nvps.add(new BasicNameValuePair("username", this.username)); 
    nvps.add(new BasicNameValuePair("password", this.password)); 
    httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); 
    HttpResponse r = session.execute(httpost); 

    // verify it succeeded 
    HttpEntity entity = r.getEntity(); 
    Header lhdr = r.getFirstHeader("Location"); 
    if (lhdr != null) { 
     // failed 
     System.err.println("Login request failed:"); 
     if (entity != null && entity.getContentEncoding() != null) { 
     dump("Login Request", 
      new InputStreamReader(entity.getContent(), entity 
         .getContentEncoding().getValue())); 
     } 
     return false; 
    } 
    if (entity != null) entity.consumeContent();  
    return true; 
    }