2011-12-11 5 views
3

私はHTTPostによって私に与えられたリダイレクトに従う必要があります。 HTTPostを作成し、応答を読み込もうとすると、リダイレクトのページhtmlが取得されます。これをどうすれば解決できますか?コード:HTTPResponseのリダイレクトに続くAndroid

public void parseDoc() { 
    final HttpParams params = new BasicHttpParams(); 
    HttpClientParams.setRedirecting(params, true); 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost(
      "https://secure.groupfusion.net/processlogin.php"); 
    String HTML = ""; 
    try { 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3); 
     nameValuePairs.add(new BasicNameValuePair("referral_page", 
       "/modules/gradebook/ui/gradebook.phtml?type=student_view")); 
     nameValuePairs.add(new BasicNameValuePair("currDomain", 
       "beardenhs.knoxschools.org")); 
     nameValuePairs.add(new BasicNameValuePair("username", username 
       .getText().toString())); 
     nameValuePairs.add(new BasicNameValuePair("password", password 
       .getText().toString())); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     String g = httppost.getURI().toString(); 

     HttpResponse response = httpclient.execute(httppost); 

     HTML = EntityUtils.toString(response.getEntity()); 
     ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
     String ResponseBody = httpclient.execute(httppost, responseHandler); 
     sting.setText(HTML); 

    } catch (ClientProtocolException e) { 
    } catch (IOException e) { 
    } 

} 
+0

'sting.setText'とは何ですか? – sidney

答えて

7

、それが実際に示し3XX応答コード(通常は301または302)に送信され、それが役立つ希望を参照しますリダイレクト、および新しい場所を示すLocationヘッダーがあります。

だから、あなたのケースでは、あなたがHttpResponseオブジェクトからLocationヘッダを取得してログインした後、実際のコンテンツを取得するための別の要求を送信するためにそれを使用することができる。例えば:

String newUrl = response.getFirstHeader("Location").getValue(); 

ので、両方のリクエストで同じHttpClientオブジェクトを再利用する限り、後続のリクエストでログインリクエストによって設定されたCookieを使用する必要があります。

+0

助けてくれてありがとうが、リダイレクトページのソースコードを見て、javascriptのon.Loadメソッドを使ってリダイレクトしています。この方法はまだ機能しますか?ありがとう。 – Eli

+0

残念ながら、いいえ。私は、JavaScriptのリダイレクトに続くHTTPクライアントライブラリを認識していません。ログイン後にリクエストしたいURLを事前に知っていない限り、あなたの唯一の選択肢はレスポンスの内容からURLを解析することです。 –

+0

ありがとうございました!私の問題は解決しました! – Eli

3

HttpGetメソッドを使用してみてください

GetMethodsは、デフォルトでは、HTTPサーバーからの要求をリダイレクトに従います。この動作は、setFollowRedirects(false)を呼び出すことで無効にすることができます。詳細について

this

サーバがリダイレクトを送信する

乾杯が

+0

返信いただきありがとうございますが、postメソッドを使用してこのサイトにログインし、ホームページのソースコードを取得する必要があります。 HTTPGetはログインに失敗するでしょうか?これは、URLにログイン資格情報を入れるためです。 – Eli

+0

はい、あなたの権利はありますが、リダイレクトに従うことができる他の方法はわかりません。 –

+0

私の問題に対する他のアプローチをお勧めしますか?私はこのウェブサイトにログインしてホームページのコンテンツを入手するだけです。これを達成できるものは何でも感謝します。ありがとう。 – Eli

関連する問題