三種POST和GET的提交方式

来源:http://www.cnblogs.com/huangjie123/archive/2016/10/11/5950078.html
-Advertisement-
Play Games

從安卓手機端以get和post的方式提交數據到伺服器端,伺服器端進行判斷,並返回相應的結果給安卓手機 ...


      向伺服器提交數據有兩種方式,post和get。兩者的區別主要有三點,安全性、長度限制、數據結構。其中get請求安全性相比較而言較差,數據長度受瀏覽器地址欄限制,沒有方法體。兩種都是較為重要的數據提交方式。現簡單介紹一下三種post和get的提交方式。無論是哪種方法實現post和get,get 的訪問路徑都要攜帶數據,而post提交是把數據放在方法體中。

     普通方法實現get/post提交:    

     嚴格遵照Http協議進行數據傳輸。在安卓開發環境下,由於主線程不能進行網路訪問,因此需要在開啟一個子線程向伺服器提交數據。為了更加直觀的觀察數據,可以在程式屏幕上顯示伺服器反饋信息。又由於子線程無法更改UI界面,因此需要引入Hnndler代理器。實現get/post提交基本步驟就是,獲取URL路徑,根據路徑得到Http連接,用HttpURLConnection對象設置相關的http配置信息、提交方式以及獲取反饋碼。當響應碼為200時表示提交成功,可以通過HttpURLConnection以流的形式獲取反饋信息。 

         普通GRT提交方式:

public void load(View view){
		final String qq = et_qq.getText().toString().trim();
		final String pwd = et_pwd.getText().toString().trim();
		if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
			Toast.makeText(MainActivity.this, "qq號或密碼為空", 0).show();
	    	return;
		}
		final String path = "http://192.168.1.114:8080/qqload/qqload?qq=" + qq
				+ "&pwd=" + pwd;
		new Thread() {
			public void run() {
				try {
					URL url = new URL(path);
					HttpURLConnection conn = (HttpURLConnection) url
							.openConnection();
					conn.setRequestMethod("GET");
					conn.setReadTimeout(5000);
					int code = conn.getResponseCode();
					if (code == 200) {
						InputStream is = conn.getInputStream();
						String result = StreamTools.ReadStream(is);
						Message msg = Message.obtain();
						msg.what = SUCCESS;
						msg.obj = result;
						handler.sendMessage(msg);
					} else {
						Message msg = Message.obtain();
						msg.what = ERROR1;
						handler.sendMessage(msg);
					}
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					Message msg = Message.obtain();
					msg.what = ERROR2;
					handler.sendMessage(msg);
				}
			}
		}.start();
	}

  

         普通POST提交方式:

public void load(View view){
        final String qq = et_qq.getText().toString().trim();
        final String pwd = et_pwd.getText().toString().trim();
        if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
            Toast.makeText(MainActivity.this, "qq號或密碼為空", 0).show();
            return;
        }
        final String path = "http://192.168.1.114:8080/qqload/qqload";
        new Thread() {
            public void run() {
                try {
                    URL url = new URL(path);
                    HttpURLConnection conn = (HttpURLConnection) url
                            .openConnection();
                    conn.setRequestMethod("POST");
                    conn.setReadTimeout(5000);
                    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                    String data = "qq="+URLEncoder.encode(qq,"utf-8")+"&pwd=" + URLEncoder.encode(pwd,"utf-8"); 
                    conn.setRequestProperty("Content-Length",String.valueOf(data.length()));
                    conn.setDoOutput(true);
                    conn.getOutputStream().write(data.getBytes());
                    int code = conn.getResponseCode();
                    if (code == 200) {
                        InputStream is = conn.getInputStream();
                        String result = StreamTools.ReadStream(is);
                        Message msg = Message.obtain();
                        msg.what = SUCCESS;
                        msg.obj = result;
                        handler.sendMessage(msg);
                    } else {
                        Message msg = Message.obtain();
                        msg.what = ERROR1;
                        handler.sendMessage(msg);
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    Message msg = Message.obtain();
                    msg.what = ERROR2;
                    handler.sendMessage(msg);
                }
            }
        }.start();
    }

 

       用httpclien實現get/post提交的只需要一下幾個步驟:

       1.     創建HttpClient對象,實現打開瀏覽器的功能

                       HttpClient client = new DefaultHttpClient();

   2.     輸入地址或者數據 ,用到HttpGet()或HttpPost(),傳入要訪問的路徑,得到HttpGet或HttpPost對象。

            HttpGet  httpGet = new HttpGet(path);

  3.     把獲得的HttpGet或HttpPost對象發送到伺服器,實現敲回車的功能,得到HttpResponse對象。

        HttpResponse response = client.execute(httpGet);

  4.     得到HttpResponse對象獲取狀態行中的狀態碼,判斷狀態碼狀態碼。

         int code = response.getStatusLine().getStatusCode();

  5.     同樣用HttpResponse對象獲取相應內容,存入流對象。最後將得到的流對象轉為字元串進行顯示。

         InputStream is = response.getEntity().getContent();

    其中要註意的一點是用post請求時要傳遞值所以要多出一個步驟。具體而言,先創建一個list集合,集合的泛型用NameValuePair表示,類似於鍵值對的形式存儲要傳遞的數據。接著向集合中添加要提交數據。最後用HttpPost對象把集合存入請求體中。

           用HttpClient實現GET提交:

public void load(View view){
        final String qq = et_qq.getText().toString().trim();
        final String pwd = et_pwd.getText().toString().trim();
        if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
            Toast.makeText(MainActivity.this, "qq號或密碼為空", 0).show();
            return;
        }
        final String path = "http://192.168.1.114:8080/qqload/qqload?qq=" + qq
                + "&pwd=" + pwd;
        new Thread() {
            public void run() {
                try {
                    HttpClient client = new DefaultHttpClient();
                    HttpGet httpget = new HttpGet(path);
                    HttpResponse response = client.execute(httpget);
                    int code = response.getStatusLine().getStatusCode();
                    if (code == 200) {
                        InputStream is = response.getEntity().getContent();
                        String result = StreamTools.ReadStream(is);
                        Message msg = Message.obtain();
                        msg.what = SUCCESS;
                        msg.obj = result;
                        handler.sendMessage(msg);
                    } else {
                        Message msg = Message.obtain();
                        msg.what = ERROR1;
                        handler.sendMessage(msg);
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    Message msg = Message.obtain();
                    msg.what = ERROR2;
                    handler.sendMessage(msg);
                }
            }
        }.start();
    }

 

             用HttpClient實現POST提交:    

    public void load(View view){
        final String qq = et_qq.getText().toString().trim();
        final String pwd = et_pwd.getText().toString().trim();
        if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
            Toast.makeText(MainActivity.this, "qq號或密碼為空", 0).show();
            return;
        }
        final String path = "http://192.168.1.114:8080/qqload/qqload";
        new Thread() {
            public void run() {
                try {
                    HttpClient client = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost(path);
                    List<NameValuePair> parameter = new ArrayList();
                    parameter.add(new BasicNameValuePair("qq", qq));
                    parameter.add(new BasicNameValuePair("pwd", pwd));
                    httppost.setEntity(new UrlEncodedFormEntity(parameter,"utf-8"));
                    HttpResponse response = client.execute(httppost);
                    int code = response.getStatusLine().getStatusCode();
                    if (code == 200) {
                        InputStream is = response.getEntity().getContent();
                        String result = StreamTools.ReadStream(is);
                        Message msg = Message.obtain();
                        msg.what = SUCCESS;
                        msg.obj = result;
                        handler.sendMessage(msg);
                    } else {
                        Message msg = Message.obtain();
                        msg.what = ERROR1;
                        handler.sendMessage(msg);
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    Message msg = Message.obtain();
                    msg.what = ERROR2;
                    handler.sendMessage(msg);
                }
            }
        }.start();
    }

 

         

        使用開源框架實現get/post提交:

        利用框架實現get/post提交不需要再開啟子線程。直接在主線程進行get/post的提交,大大的減少了工作量。但操作前需要導包。然後直接創建一個AsyncHttpClient對象,用AsyncHttpClient對象的post方法和get方法,發送請求,併在AsyncHttpResponseHandler()對象中獲得相應信息。同樣若是post請求,仍舊需要傳遞值。這裡可以用RequestParams對象添加要傳遞的值。

         在文件下添加jar包:

                           

           用開源框架實現GET提交:

public void load(View view){
        final String qq = et_qq.getText().toString().trim();
        final String pwd = et_pwd.getText().toString().trim();
        if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
            Toast.makeText(MainActivity.this, "qq號或密碼為空", 0).show();
            return;
        }
        final String path = "http://192.168.1.114:8080/qqload/qqload?qq=" + qq
                + "&pwd=" + pwd;
        AsyncHttpClient client = new AsyncHttpClient();
        client.get(path, new AsyncHttpResponseHandler() {
            
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                // TODO Auto-generated method stub
                tv_result.setText(new String(responseBody));
            }
            
            @Override
            public void onFailure(int statusCode, Header[] headers,
                    byte[] responseBody, Throwable error) {
                // TODO Auto-generated method stub
                tv_result.setText("錯誤原因:" + new String(responseBody));
            }
        });
    }

 

     

        用開源框架實現POST請求:

    public void load(View view){
        final String qq = et_qq.getText().toString().trim();
        final String pwd = et_pwd.getText().toString().trim();
        if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
            Toast.makeText(MainActivity.this, "qq號或密碼為空", 0).show();
            return;
        }
        final String path = "http://192.168.1.114:8080/qqload/qqload";
        AsyncHttpClient client = new AsyncHttpClient();
        RequestParams params = new RequestParams();
        params.add("qq", qq);
        params.add("pwd", pwd);
        client.post(path,params,new AsyncHttpResponseHandler() {
            
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                // TODO Auto-generated method stub
                tv_result.setText(new String(responseBody));
            }
            
            @Override
            public void onFailure(int statusCode, Header[] headers,
                    byte[] responseBody, Throwable error) {
                // TODO Auto-generated method stub
                tv_result.setText(new String(responseBody));
            }
        });
    }

       

          通過以上任何一種方式可以實現的功能是,從安卓手機端提交數據到伺服器端,伺服器端進行判斷,並返回相應的結果。三種方式各有利弊,實現效果相同,在實際的使用過程中可以根據本身的需要進行選擇。

 

               

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 實現效果: 圖片素材: --> 首先, 城市數據位元組放在 Json 文件, 就不網路獲取了. city.json 存放 Json 數據: 1 { 2 "result": "0", 3 "message": "介面通信成功!", 4 "responseData": { 5 "History": [], ...
  • app的上架流程 一.準備工作 首先需要有開發者賬號,企業級的賬號是299$,個人開發者賬號是99$,沒有的話可以登錄http://developer.apple.com/自行申請 假如你已經有賬號了,進入蘋果官網點擊Accout登錄 二.申請證書 登錄完成後點擊證書,進入界面,有證書.標識.設備. ...
  • 設置slider當前位置的圖像 [slider setThumbImage:[UIImage imageNamed:@"dd.png"] forState:UIControlStateNormal];設置起始的顏色 [slider setMinimumTrackTintColor:[ComHelpe... ...
  • 本篇討論在UWP開發中使用WebView控制項時常見的問題,以及一些小技巧。 WebView是實際開發中常用的控制項,很多大家抱怨的套網頁的應用都是通過WebView來實現的。這裡要澄清一個問題,套網頁的應用並不一定是差的應用,很多網頁採用了響應式設計,假設網頁不存在複雜的交互,提取網頁的正文部分嵌入W ...
  • Android studio 作為谷歌的親兒子,同時之前使用的ADT,谷歌已經發佈了不再繼續維護的“宣言”,因此,它成為了我們的首選。 那麼我們該如何開始呢? 下載AndroidStudio最新版,眾所周知,因為網路的限制,我們無法直接到Google官網去下載,或者網速很慢,因此採用http://w ...
  • 原生Picker和仿iOS的Picker都是上下或左右滑動到固定區域來選擇選項: 顯示數量少,如果當前選項距離需要的選項比較遠就得滑很多次; 滑動不好控制,一不小心就滑過了需要往相反方向慢慢滑回來,很煩人。 ZBLibrary中的GridPicker每頁顯示多行多列,大大增加了顯示數量;將滑動選擇... ...
  • 一、初始化 二、常見的屬性 1、segmentedControlStyle屬性:設置基本的樣式 2、momentary屬性:設置在點擊後是否恢複原樣 。 3、numberOfSegments屬性:只讀,獲取總選項數。 4、apportionsSegmentWidthsByContent屬性:設置是否 ...
  • 現在開始具體 處理每一個導航頁面的邏輯,首先看第二個導航頁 本文地址:http://www.cnblogs.com/wuyudong/p/5949775.html,轉載請註明出處。 這裡需要實現綁定sim卡序列號的功能,註意添加相應的許可權:uses-permission android:name=" ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...