2011-12-11 25 views
3

我需要遵循HTTPost給我的重定向。當我做一個HTTPost,並嘗試讀取響應時,我得到了重定向的頁面html。我怎樣才能解決這個問題?代碼:使用HttpGet方法以下HTTPResponse中的重定向Android

會的getMethods遵循重定向默認從HTTP服務器請求

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),其指示重定向,以及一個位置標題,告訴你新的位置。

所以,你的情況,你可以從HttpResponse對象Location頭,並用它來發送另一個請求以獲取實際的內容你已經登錄後,例如:

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

所以只要您爲這兩個請求重複使用相同的HttpClient對象,就應該在隨後的請求中使用由登錄請求設置的任何cookie。

+0

感謝您的幫助,但是我查看了重定向頁面的源代碼,它使用javascript on.Load方法重定向我。這種方法仍然有效嗎?謝謝。 – Eli

+0

不幸的是,沒有。我不知道任何可以遵循JavaScript重定向的HTTP客戶端庫。除非事先知道您要登錄後請求的URL,否則我認爲您唯一的選擇是從響應內容中解析出URL。 –

+0

謝謝你們!解決了我的問題! – Eli

3

嘗試。這種行爲可以通過調用setFollowRedirects(false)來禁用。

有關的詳細信息請參閱this

希望它能幫助,

乾杯

+0

感謝您的回覆,但我需要使用post方法登錄到本網站,然後獲取主頁的源代碼。 HTTPGet會登錄失敗,不是嗎?因爲它會將登錄憑據放入網址中。 – Eli

+0

是的你的權利,但我不知道任何其他方式使用,你可以按照重定向。 –

+0

你會提出任何其他方法來解決我的問題嗎?我只需登錄此網站並獲取主頁內容。任何可以做到這一點的東西將不勝感激。謝謝。 – Eli