標籤:des android style blog http io ar color os
要解決重新導向導致瀏覽器,無法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";@Overrideprotected 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() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnew MyTask().execute(editText1.getText().toString());}});}public int getPost(String string) {// TODO Auto-generated method stubint 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<String, Integer, Integer>{@Overrideprotected Integer doInBackground(String... params) {// TODO Auto-generated method stubString url=params[0];return getPost(url);}@Overrideprotected void onPostExecute(Integer result) {// TODO Auto-generated method stubtextView.setText("code:"+result);}}public class MyRedirectHandler extends DefaultRedirectHandler{@Overridepublic boolean isRedirectRequested(HttpResponse response,HttpContext context) {// TODO Auto-generated method stubreturn false;}}}
以下重新導向狀態碼,來自其他部落格:
<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">一些常見的狀態碼為:</p><ul style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><li><strong>200</strong> - 伺服器成功返回網頁</li><li><strong>404</strong> - 請求的網頁不存在</li><li><strong>503</strong> - 伺服器暫時不可用</li></ul><p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">以下提供了 HTTP 狀態碼的完整列表。點選連結可瞭解詳細資料。您也可以訪問有關 HTTP 狀態碼的 W3C 頁來瞭解詳細資料。</p><p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><strong>1xx(臨時響應)</strong>用於表示臨時響應並需要要求者執行操作才能繼續的狀態碼。</p><table border="1" cellspacing="1" summary="1xx status codes indicating a provisional response" cellpadding="1" style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><tbody><tr><th scope="col">代碼</th><th scope="col">說明</th></tr><tr><td>100(繼續)</td><td>要求者應當繼續提出請求。伺服器返回此代碼則意味著,伺服器已收到了請求的第一部分,現正在等待接收其餘部分。</td></tr><tr><td>101(切換協議)</td><td>要求者已要求伺服器切換協議,伺服器已確認並準備進行切換。</td></tr></tbody></table><p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><strong>2xx(成功)</strong></p><p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">用於表示伺服器已成功處理了請求的狀態碼。</p><table border="1" cellspacing="1" summary="2xx status codes indicating successful requests" cellpadding="1" style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><tbody><tr><th scope="col">代碼</th><th scope="col">說明</th></tr><tr><td>200(成功)</td><td>伺服器已成功處理了請求。通常,這表示伺服器提供了請求的網頁。如果您的 robots.txt 檔案顯示為此狀態,那麼,這表示 Googlebot 已成功檢索到該檔案。</td></tr><tr><td>201(已建立)</td><td>請求成功且伺服器已建立了新的資源。</td></tr><tr><td>202(已接受)</td><td>伺服器已接受了請求,但尚未對其進行處理。</td></tr><tr><td>203(非授權資訊)</td><td>伺服器已成功處理了請求,但返回了可能來自另一來源的資訊。</td></tr><tr><td>204(無內容)</td><td>伺服器成功處理了請求,但未返回任何內容。</td></tr><tr><td>205(重設內容)</td><td>伺服器成功處理了請求,但未返回任何內容。與 204 響應不同,此響應要求要求者重設文檔視圖(例如清除表單內容以輸入新內容)。</td></tr><tr><td>206(部分內容)</td><td>伺服器成功處理了部分 GET 請求。</td></tr></tbody></table><p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><strong>3xx(已重新導向)</strong> 要完成請求,您需要進一步進行操作。通常,這些狀態碼是永遠重新導向的。Google 建議您在每次請求時使用的重新導向要少於 5 個。您可以使用網站管理員工具來查看 Googlebot 在抓取您已重新導向的網頁時是否會遇到問題。診斷下的抓取錯誤頁中列出了 Googlebot 由於重新導向錯誤而無法抓取的網址。</p><table border="1" cellspacing="1" summary="3xx status codes requiring further action" cellpadding="1" style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><tbody><tr><th scope="col">代碼</th><th scope="col">說明</th></tr><tr><td>300(多種選擇)</td><td>伺服器根據請求可執行多種操作。伺服器可根據要求者 (User agent) 來選擇一項操作,或提供巨集指令清單供要求者選擇。</td></tr><tr><td>301(永久移動)</td><td>請求的網頁已被永久移動到新位置。伺服器返回此響應(作為對 GET 或 HEAD 請求的響應)時,會自動將要求者轉到新位置。您應使用此代碼通知 Googlebot 某個網頁或網站已被永久移動到新位置。</td></tr><tr><td>302(臨時移動)</td><td>伺服器目前正從不同位置的網頁響應請求,但要求者應繼續使用原有位置來進行以後的請求。此代碼與響應 GET 和 HEAD 請求的 301 代碼類似,會自動將要求者轉到不同的位置。但由於 Googlebot 會繼續抓取原有位置並將其編入索引,因此您不應使用此代碼來通知 Googlebot 某個頁面或網站已被移動。</td></tr><tr><td>303(查看其他位置)</td><td>當要求者應對不同的位置進行單獨的 GET 請求以檢索響應時,伺服器會返回此代碼。對於除 HEAD 請求之外的所有請求,伺服器會自動轉到其他位置。</td></tr><tr><td>304(未修改)</td><td><p>自從上次請求後,請求的網頁未被修改過。伺服器返回此響應時,不會返回網頁內容。</p><p>如果網頁自要求者上次請求後再也沒有更改過,您應當將伺服器配置為返回此響應(稱為 If-Modified-Since HTTP 標題)。由於伺服器可以告訴 Googlebot 自從上次抓取後網頁沒有更改過,因此可節省頻寬和開銷</p>。</td></tr><tr><td>305(使用代理)</td><td>要求者只能使用代理訪問請求的網頁。如果伺服器返回此響應,那麼,伺服器還會指明要求者應當使用的代理。</td></tr><tr><td>307(臨時重新導向)</td><td>伺服器目前正從不同位置的網頁響應請求,但要求者應繼續使用原有位置來進行以後的請求。此代碼與響應 GET 和 HEAD 請求的 301 代碼類似,會自動將要求者轉到不同的位置。但由於 Googlebot 會繼續抓取原有位置並將其編入索引,因此您不應使用此代碼來通知 Googlebot 某個頁面或網站已被移動。</td></tr></tbody></table><p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><strong>4xx(請求錯誤)</strong> 這些狀態碼表示,請求可能出錯,已妨礙了伺服器對請求的處理。</p><table border="1" cellspacing="1" summary="4xx status codes indicating that the server could not process the request" cellpadding="1" style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><tbody><tr><th scope="col">代碼</th><th scope="col">說明</th></tr><tr><td>400(錯誤請求)</td><td>伺服器不理解請求的文法。</td></tr><tr><td>401(未授權)</td><td>請求要求進行身分識別驗證。登入後,伺服器可能會返回對頁面的此響應。</td></tr><tr><td>403(已禁止)</td><td>伺服器拒絕請求。如果在 Googlebot 嘗試抓取您網站上的有效網頁時顯示此狀態碼(您可在 Google 網站管理員工具中<strong>診斷</strong>下的<strong>網路抓取</strong>頁面上看到此狀態碼),那麼,這可能是您的伺服器或主機拒絕 Googlebot 對其進行訪問。</td></tr><tr><td>404(未找到)</td><td><p>伺服器找不到請求的網頁。例如,如果請求是針對伺服器上不存在的網頁進行的,那麼,伺服器通常會返回此代碼。</p><p>如果您的網站上沒有 robots.txt 檔案,而您在 Google 網站管理員工具診斷標籤的 robots.txt 頁上發現此狀態,那麼,這是正確的狀態。然而,如果您有 robots.txt 檔案而又發現了此狀態,那麼,這說明您的 robots.txt 檔案可能是命名錯誤或位於錯誤的位置。(該檔案應當位於頂級網域名稱上,且應當名為 robots.txt)。</p><p>如果您在 Googlebot 嘗試抓取的網址上發現此狀態(位於"診斷"標籤的 HTTP 錯誤頁上),那麼,這表示 Googlebot 所追蹤的可能是另一網頁中的無效連結(舊連結或輸入有誤的連結)。</p></td></tr><tr><td>405(方法禁用)</td><td>禁用請求中所指定的方法。</td></tr><tr><td>406(不接受)</td><td>無法使用請求的內容特性來響應請求的網頁。</td></tr><tr><td>407(需要代理授權)</td><td>此狀態碼與 401(未授權)類似,但卻指定了要求者應當使用代理進行授權。如果伺服器返回此響應,那麼,伺服器還會指明要求者應當使用的代理。</td></tr><tr><td>408(請求逾時)</td><td>伺服器等候請求時逾時。</td></tr><tr><td>409(衝突)</td><td>伺服器在完成請求時發生衝突。伺服器必須包含有關響應中所發生的衝突的資訊。伺服器在響應與前一個請求相衝突的 PUT 請求時可能會返回此代碼,同時會提供兩個請求的差異列表。</td></tr><tr><td>410(已刪除)</td><td>如果請求的資源已被永久刪除,那麼,伺服器會返回此響應。該代碼與 404(未找到)代碼類似,但在資源以前有但現在已經不複存在的情況下,有時會替代 404 代碼出現。如果資源已被永久刪除,那麼,您應當使用 301 代碼指定該資源的新位置。</td></tr><tr><td>411(需要有效長度)</td><td>伺服器不會接受包含無效內容長度標題欄位的請求。</td></tr><tr><td>412(未滿足前提條件)</td><td>伺服器未滿足要求者在請求中設定的其中一個前提條件。</td></tr><tr><td>413(請求實體過大)</td><td>伺服器無法處理請求,因為請求實體過大,已超出伺服器的處理能力。</td></tr><tr><td>414(請求的 URI 過長)</td><td>請求的 URI(通常為網址)過長,伺服器無法進行處理。</td></tr><tr><td>415(不支援的媒體類型)</td><td>請求的格式不受請求頁面的支援。</td></tr><tr><td>416(請求範圍不符合要求)</td><td>如果請求是針對網頁的無效範圍進行的,那麼,伺服器會返回此狀態碼。</td></tr><tr><td>417(未滿足期望值)</td><td>伺服器未滿足"期望"請求標題欄位的要求。</td></tr></tbody></table><p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><strong>5xx(伺服器錯誤)</strong>這些狀態碼表示,伺服器在嘗試處理請求時發生內部錯誤。這些錯誤可能是伺服器本身的錯誤,而不是請求出錯。</p><table border="1" cellspacing="1" summary="5xx status codes indicating that the server had an internal error" cellpadding="1" style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><tbody><tr><th scope="col">代碼</th><th scope="col">說明</th></tr><tr><td>500(伺服器內部錯誤)</td><td>伺服器遇到錯誤,無法完成請求。</td></tr><tr><td>501(尚未實施)</td><td>伺服器不具備完成請求的功能。例如,當伺服器無法識別要求方法時,伺服器可能會返回此代碼。</td></tr><tr><td>502(錯誤網關)</td><td>伺服器作為網關或代理,從上遊伺服器收到了無效的響應。</td></tr><tr><td>503(服務不可用)</td><td>目前無法使用伺服器(由於超載或進行停機維護)。通常,這隻是一種暫時的狀態。</td></tr><tr><td>504(網關逾時)</td><td>伺服器作為網關或代理,未及時從上遊伺服器接收請求。</td></tr><tr><td>505(HTTP 版本不受支援)</td><td>伺服器不支援要求中所使用的 HTTP 協議版本。</td></tr></tbody></table>
android Webkit 解決重新導向 之 通過URL判斷 網頁是否是重新導向的CODE 3XX