安卓基礎-get post請求與提交資料
為什麼寫這篇文章呢? 很簡單的東西 但我發現隨著時間變化
越基礎的東西忘得越多 準備寫部落格回憶一下 而且目前在做逆向的東西 會寫一些小型APP 但網路請求這塊根本沒必要用框架 所以算是寫個工具部落格專門給自己看的 到時候直接粘程式碼 當然如果能幫到一些朋友 那更好
GET方式提交資料
new Thread(){ public void run() { try { //GET請求方式的特點:在url後面組拼資料 根據給的資料不同 介面會返回相應的資料 String path = "http://192.168.1.103:8080/web/Test?imei="+IMEI+"&=model"+MODEL); URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(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 = ERROR; handler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); Message msg = Message.obtain(); msg.what = ERROR; handler.sendMessage(msg); } }; }.start();
POST方式提交資料
new Thread(){ public void run() { //路徑不需要組拼 String path = "http://192.168.1.103:8080/web/Test"; try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //1.設定請求方式為POST conn.setRequestMethod("POST"); //注意單詞必須大寫. conn.setConnectTimeout(5000); //2.設定http請求資料的型別為表單型別 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); //3.設定給伺服器寫的資料的長度 // imei=865161564315&model=huawei G720-t01 String data = "imei="+IMEI+"&model="+MODEL; conn.setRequestProperty("Content-Length", String.valueOf(data.length())); //4.記得指定要給伺服器寫資料 conn.setDoOutput(true); //5.開始向伺服器寫資料 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 = ERROR; handler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); Message msg = Message.obtain(); msg.what = ERROR; handler.sendMessage(msg); } }; }.start();
protected static final int SUCCESS = 1; protected static final int ERROR = 2; private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case ERROR: Toast.makeText(MainActivity.this, "網路異常", Toast.LENGTH_SHORT) .show(); break; case SUCCESS: String http = (String) msg.obj; break; } } };
GET請求和POST請求的區別
優缺點
* GET請求
優點:使用非常方便,只需要在url後面組拼資料。
缺點:資料在url的後面組拼,不安全。有資料長度限制。
* POST請求
優點:安全,資料不是在url後面組拼而是透過流的方式寫給伺服器。資料長度不受限制
缺點:編寫麻煩。
資料提交
* GET請求
1. 需要在url後面組拼提交的資料
* POST請求
1. 不需要組拼任何的資料
2. 必須指定請求的資料型別,是一個經過url編碼的表單資料。Content-Type
3. 以流的方式把資料寫給伺服器,所以必須指定提交資料的長度。Content-Length
總結
就安全來說 其實這兩種根本就沒區別 如果是https的話會好一些 但如果用charles 或者Fiddler 抓包大部分資料都可以看到
https的話頂多不好做一些劫持 但如果找到應用內部請求程式碼 可以用replace把 https 在內部轉成http 在重打包就可以了
至於說實際過程中用到那種 根據當前情況來 有時候後臺會限制你用get還是post 大部分還是想用那種用那種
GB2312和GBK
GB2312
1980年釋出,標準共收錄6763個漢字,其中一級漢字3755個,二級漢字3008個;同時,GB2312收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西裡爾字母在內的682個全形字元。
GB 2312的出現,基本滿足了漢字的計算機處理需要,它所收錄的漢字已經覆蓋中國大陸99.75%的使用頻率。
對於人名、古漢語等方面出現的罕用字,GB2312不能處理,這導致了後來GBK及GB18030漢字字符集的出現。
GBK
1995年釋出,是在GB2312-80標準基礎上的內碼擴充套件規範,共收錄了21003個漢字,完全相容GB2312-80標準。
string.getBytes(String charsetName)和new String(byte[] bytes, String charsetName)
- byte[] bytes = string.getBytes(String charsetName)
將字串按指定的編碼轉化為byte陣列,預設採用本地碼錶 - new String(byte[] bytes, String charsetName)
將byte陣列按指定的編碼轉化為字串
注意:出現亂碼時不要修改檔案,修改後無論怎麼切換編碼都是錯的了
提交資料中含有中文的注意事項
客戶端
//提交的資料中含有中文時,將字串IMEI按照編碼UTF-8進行編碼 URLEncoder.encode(IMEI, "UTF-8");
HttpClient的GET請求
GET請求
new Thread(){ public void run() { try { String path = "介面地址"; //1.開啟瀏覽器 HttpClient client = new DefaultHttpClient(); //2.輸入地址或者資料 HttpGet httpGet = new HttpGet(path); //3.敲回車 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 = ERROR; handler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); Message msg = Message.obtain(); msg.what = ERROR; handler.sendMessage(msg); } }; }.start();
總結
andoird{ useLibrary 'org.apache.http.legacy' }
相關文章
- POST與GET請求區別2019-05-15
- get與post的請求區別2018-10-10
- 網路程式設計基礎,模擬get post請求2015-05-19程式設計
- GET和POST方式請求API介面資料返回2023-04-14API
- iOS 同步請求 非同步請求 GET請求 POST請求2014-02-20iOS非同步
- 前端常見的請求資料彙總(GET POST)2021-04-02前端
- vue axios資料請求get、post方法的使用2018-09-11VueiOS
- POST 請求的三種常見資料提交格式2019-06-18
- HTTP Get,Post請求詳解2016-12-20HTTP
- Get和Post請求詳解2013-11-06
- get請求和post請求的區別2022-03-21
- vue 發起get請求和post請求2024-06-09Vue
- Android Http請求框架一:Get 和 Post 請求2015-07-07AndroidHTTP框架
- Android okHttp網路請求之Get/Post請求2016-05-25AndroidHTTP
- java傳送GET和post請求2020-04-05Java
- go對get、post請求封裝2020-11-18Go封裝
- get,post URL加字尾請求2020-11-27
- PHP傳送POST和GET請求2017-11-12PHP
- Java Http Get Post 請求工具類2024-03-11JavaHTTP
- get請求和post請求區別詳解2017-02-10
- uni-app的POST請求和GET請求2024-04-26APP
- 使用axios post 請求資料無法提交的問題2018-07-19iOS
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。2020-05-13SpringMVCdelete
- Http請求get與post請求方式的各種相關面試總結2023-04-12HTTP面試
- 【轉】怎麼用PHP傳送HTTP請求(POST請求、GET請求)?2014-12-25PHPHTTP
- axios 發get,post 請求小結2019-01-25iOS
- httprequest- post- get -傳送請求2018-12-30HTTP
- get和post請求的區別(面試)2020-12-01面試
- php 利用socket傳送GET,POST請求2015-07-28PHP
- java傳送http的get、post請求2014-07-29JavaHTTP
- 前後端資料互動(八)——請求方法 GET 和 POST 區別2021-09-14後端
- http請求之get和post的區別2020-04-04HTTP
- 優雅地使用GET和POST請求方法2020-07-27
- Linux curl 命令模擬 POST/GET 請求2018-08-28Linux
- postman(二):使用postman傳送get or post請求2018-12-20Postman
- ajax的post或者get伺服器請求2018-10-18伺服器
- 介面請求 (get、post、head 等) 詳解2020-11-25
- 介面請求(get、post、head等)詳解2020-11-25