編輯:關於Android編程
要解決重定向導致浏覽器,無法goback問題一直困擾著我
最後,解決方案為,判斷3xx重定向 url,自己維護一個 返回的list歷史記錄即可實現。
代碼比較簡單直接上代碼。
前面一直得到code 200,原來是 用get請求的,直接返回重定向後的 code 。
package com.example.chongdingxiang; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.DefaultRedirectHandler; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { private Button button1; private TextView textView; private EditText editText1; public static final String TAG="MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1=(Button)findViewById(R.id.button1); textView=(TextView)findViewById(R.id.textView1); editText1=(EditText)findViewById(R.id.editText1); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub new MyTask().execute(editText1.getText().toString()); } }); } public int getPost(String string) { // TODO Auto-generated method stub int code=0; HttpGet getMethod = new HttpGet(string); DefaultHttpClient loginClient = new DefaultHttpClient(); MyRedirectHandler redirectHandler=new MyRedirectHandler(); loginClient.setRedirectHandler(redirectHandler); try { HttpResponse response=loginClient.execute(getMethod); code= response.getStatusLine().getStatusCode(); Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼 Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//獲取服務器響應內容 } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return code; } public class MyTask extends AsyncTask{ @Override protected Integer doInBackground(String... params) { // TODO Auto-generated method stub String url=params[0]; return getPost(url); } @Override protected void onPostExecute(Integer result) { // TODO Auto-generated method stub textView.setText("code:"+result); } } public class MyRedirectHandler extends DefaultRedirectHandler{ @Override public boolean isRedirectRequested(HttpResponse response, HttpContext context) { // TODO Auto-generated method stub return false; } } }
以下重定向狀態代碼,來自其他博客:
一些常見的狀態代碼為:
以下提供了 HTTP 狀態代碼的完整列表。點擊鏈接可了解詳細信息。您也可以訪問有關 HTTP 狀態代碼的 W3C 頁來了解詳細信息。
1xx(臨時響應) 用於表示臨時響應並需要請求者執行操作才能繼續的狀態代碼。
2xx(成功)
用於表示服務器已成功處理了請求的狀態代碼。
3xx(已重定向) 要完成請求,您需要進一步進行操作。通常,這些狀態代碼是永遠重定向的。Google 建議您在每次請求時使用的重定向要少於 5 個。您可以使用網站管理員工具來查看 Googlebot 在抓取您已重定向的網頁時是否會遇到問題。診斷下的抓取錯誤頁中列出了 Googlebot 由於重定向錯誤而無法抓取的網址。
自從上次請求後,請求的網頁未被修改過。服務器返回此響應時,不會返回網頁內容。
如果網頁自請求者上次請求後再也沒有更改過,您應當將服務器配置為返回此響應(稱為 If-Modified-Since HTTP 標頭)。由於服務器可以告訴 Googlebot 自從上次抓取後網頁沒有更改過,因此可節省帶寬和開銷
。305(使用代理)請求者只能使用代理訪問請求的網頁。如果服務器返回此響應,那麼,服務器還會指明請求者應當使用的代理。307(臨時重定向)服務器目前正從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。此代碼與響應 GET 和 HEAD 請求的 301 代碼類似,會自動將請求者轉到不同的位置。但由於 Googlebot 會繼續抓取原有位置並將其編入索引,因此您不應使用此代碼來通知 Googlebot 某個頁面或網站已被移動。4xx(請求錯誤) 這些狀態代碼表示,請求可能出錯,已妨礙了服務器對請求的處理。
服務器找不到請求的網頁。例如,如果請求是針對服務器上不存在的網頁進行的,那麼,服務器通常會返回此代碼。
如果您的網站上沒有 robots.txt 文件,而您在 Google 網站管理員工具診斷標簽的 robots.txt 頁上發現此狀態,那麼,這是正確的狀態。然而,如果您有 robots.txt 文件而又發現了此狀態,那麼,這說明您的 robots.txt 文件可能是命名錯誤或位於錯誤的位置。(該文件應當位於頂級域名上,且應當名為 robots.txt)。
如果您在 Googlebot 嘗試抓取的網址上發現此狀態(位於"診斷"標簽的 HTTP 錯誤頁上),那麼,這表示 Googlebot 所追蹤的可能是另一網頁中的無效鏈接(舊鏈接或輸入有誤的鏈接)。
405(方法禁用)禁用請求中所指定的方法。406(不接受)無法使用請求的內容特性來響應請求的網頁。407(需要代理授權)此狀態代碼與 401(未授權)類似,但卻指定了請求者應當使用代理進行授權。如果服務器返回此響應,那麼,服務器還會指明請求者應當使用的代理。408(請求超時)服務器等候請求時超時。409(沖突)服務器在完成請求時發生沖突。服務器必須包含有關響應中所發生的沖突的信息。服務器在響應與前一個請求相沖突的 PUT 請求時可能會返回此代碼,同時會提供兩個請求的差異列表。410(已刪除)如果請求的資源已被永久刪除,那麼,服務器會返回此響應。該代碼與 404(未找到)代碼類似,但在資源以前有但現在已經不復存在的情況下,有時會替代 404 代碼出現。如果資源已被永久刪除,那麼,您應當使用 301 代碼指定該資源的新位置。411(需要有效長度)服務器不會接受包含無效內容長度標頭字段的請求。412(未滿足前提條件)服務器未滿足請求者在請求中設置的其中一個前提條件。413(請求實體過大)服務器無法處理請求,因為請求實體過大,已超出服務器的處理能力。414(請求的 URI 過長)請求的 URI(通常為網址)過長,服務器無法進行處理。415(不支持的媒體類型)請求的格式不受請求頁面的支持。416(請求范圍不符合要求)如果請求是針對網頁的無效范圍進行的,那麼,服務器會返回此狀態代碼。417(未滿足期望值)服務器未滿足"期望"請求標頭字段的要求。5xx(服務器錯誤) 這些狀態代碼表示,服務器在嘗試處理請求時發生內部錯誤。這些錯誤可能是服務器本身的錯誤,而不是請求出錯。
最近在寫一個應用,想把設置頁面和應用頁面放在一起,這樣就能實現用戶可以實時看到自己的設置對UI的影響,從而更方便的設置用戶喜歡的界面。想了一段時間,發現用slidingD
我在開發的時候遇到了這樣的需求,就是在listview的滑動中,需要對頂部的欄目由透明慢慢的變為不透明的狀態,就是以下的效果最先開始的時候想的很簡單,無非就是監聽list
Oracle VM VirtualBoxCentos cron計劃任務: 命令示例: Cat 1.txtTac 1.txtFin
簡介這是一個基於AlertDialog和Dialog這兩個類封裝的多種彈出框樣式,其中提供各種簡單樣式的彈出框使用說明。同時也可自定義彈出框。項目地址:http://ww