HttpClient的使用(模擬登入)
HttpClient是專門設計用來簡化HTTP客戶端與伺服器間各種通訊,程式設計的,可以使複雜的事情變得簡單。
注意: 在Android SDK編譯版本為23的時,且使用HTTPClient相關類庫專案的時候,如使用HttpClient會出現無法解析的錯誤, 這是由於android 6.0 (API 23) 不在提供 org.apache.http .* (只保留幾個類)
HTTP請求方法中最常見的方法為 GET 與 POST:
GET 方法:
GET方法要求伺服器將URL定位的資源放在想用報文的資料部分,會送給客戶端,使用GET方法時,請求引數和對應的值附加在URL後面,利用一個(“?”)代表
GET 方式特點:GET方式是不安全的 ,因為在傳輸過程中資料被放在請求的URL中,而如今現有的很多伺服器代理伺服器或者使用者代理都會將請求URL記錄到日誌檔案中,然後存放在某處, 這樣一些隱私資訊就可能會被第三方看到。
GET傳輸的資料兩是有限的,主要受URL的限制,但是其傳輸速度快。
下面舉例說明HTTpClient GET 的使用過程。
《 因為Android 中不允許在UI執行緒中進行耗時的操作,因此訪問網路操作要放在工作執行緒中》
private void getRequest() {
new Thread(new Runnable() {
@Override
public void run() {
String path = "http://192.168.56.1:8080/HelloServlet/LoginServlet?username=wang&password=1234";
// 建立請求物件
HttpGet httpGet = new HttpGet(path);
// 建立Http客戶端物件,用於實現傳送請求
HttpClient client = new DefaultHttpClient();
try {
// 向伺服器傳送請求並返回響應物件
HttpResponse response =client.execute(httpGet);
// 獲取響應的狀態碼
int staus= response.getStatusLine().getStatusCode();
switch (staus){
case HttpStatus.SC_OK://200
// 獲取結果實體
HttpEntity entity= response.getEntity();
String result= EntityUtils.toString(entity, "utf-8");
System.out.println(result);
break;
case HttpStatus.SC_NOT_FOUND:// 404
break;
case HttpStatus.SC_INTERNAL_SERVER_ERROR:// 伺服器異常(狀態碼500)
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
POST方式:POST方法要求被請求伺服器接收請求的資料,常用於提交表單,當客戶端給伺服器提供資訊較多時可以使用POST方法,POST方法將請求引數封裝在HTTP請求資料中,以名稱值得形式出現,可以傳輸大量資料但是速度慢。並且是安全的。
例項如下:(模仿使用者註冊的一個過程,將其寫在一個方法中)
private void postRequest() {
new Thread(new Runnable() {
@Override
public void run() {
String path = "http://192.168.56.1:8080/HelloServlet/LoginServlet";
// 建立請求物件
//與get的差別在於傳遞引數的時候使用對NameValuePair對
HttpPost post = new HttpPost(path);
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username","wang"));
params.add(new BasicNameValuePair("password","1234"));
try {
HttpEntity entity = new UrlEncodedFormEntity(params);
post.setEntity(entity);
HttpClient client = new DefaultHttpClient();
HttpResponse responce = client.execute(post);
switch (responce.getStatusLine().getStatusCode()){ // 對伺服器返回的狀態碼進行判斷
case HttpStatus.SC_OK:
String result = EntityUtils.toString(responce.getEntity(),"utf-8");
System.out.println(result);
break;
case HttpStatus.SC_NOT_FOUND:
Log.i("HttpClient------->","404");
break;
case HttpStatus.SC_INTERNAL_SERVER_ERROR:
Log.i("HttpClient------->","500");
break;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
相關推薦
HttpClient的使用(模擬登入)
HttpClient是專門設計用來簡化HTTP客戶端與伺服器間各種通訊,程式設計的,可以使複雜的事情變得簡單。 注意: 在Android SDK編譯版本為23的時,且使用HTTPClient相關類庫專案的時候,如使用HttpClient會出現無法解析的錯誤, 這是由於an
python爬蟲獲取強智科技教務系統學科成績(模擬登入+成績獲取)
直接貼出程式碼提供分享 歡迎訪問例項(本作者自己寫的網站):www.wjn1996.cn/estudy,進入首頁往下點選“常用工具》教務成績查詢”,網站採用jsp呼叫python指令碼,具體疑問可提出。 import urllib import urllib
爬蟲入門到精通-headers的詳細講解(模擬登入知乎)
直接開始案例吧。 本次我們實現如何模擬登陸知乎。 1.抓包 首先開啟知乎登入頁 知乎 - 與世界分享你的知識、經驗和見解 注意開啟開發者工具後點擊“preserve log”,密碼記得故意輸入錯誤,然後點選登入 我們很簡單的就找到了 我們需要的請
破解 js 防 ifram 嵌入方法(繞開防嵌js 實現跨域模擬登入)
運用場景: 我想在我的系統(A系統)上用ifram嵌入一個他人跨域的系統(B系統),且該系統需要進行登入驗證。 <ifram>很容易就實現了,可是這時候,頁面地址立馬發生跳轉到B系統的登入頁。原來在B系統的登入頁面上有這麼一句防止被
HttpClient---cookie(保持登入)
public class APIMthod { // 建立CookieStore例項 private static CookieStore cookieStore = null; private static HttpClientCont
[Golang] 從零開始寫Socket Server(3): 對長、短連接的處理策略(模擬心跳)
microsoft ted 每次 range 點擊 關閉 ade 而在 href 通過前兩章,我們成功是寫出了一套湊合能用的Server和Client,並在二者之間實現了通過協議交流。這麽一來,一個簡易的socket通訊框架已經初具雛形了,那麽我們接下來做的
bzoj3680: 吊打XXX(模擬退火)
exp span long long 接下來 main mage 要求 概率 spa 題目要求 最小(dis表示繩結到點i的距離),就是個廣義費馬點的題,模擬退火裸題QAQ 模擬退火就是優化後的爬山算法,一開始先隨機一個平均點,接下來如果隨機到的點比
【BZOJ3680】吊打XXX(模擬退火)
pre post 找到 line == down set turn += 【BZOJ3680】吊打XXX(模擬退火) 題面 BZOJ 題解 模擬退火。。。 就是模擬退火 然後這題有毒 各種調參數之後終於\(AC\)了。。 這種題就是玄學呀。。。 溫度要調大 最後跑完還要向四
洛谷P1337 【[JSOI2004]平衡點 / 吊打XXX】(模擬退火)
最小 com flash www. show over 接受 http 一個點 洛谷題目傳送門 很可惜,充滿Mo力的Mo擬退火並不是正解。不過這是一道最適合開始入手Mo擬退火的好題。 對模擬退火還不是很清楚的可以看一下 這道題還真和能量有點關系。達到平衡穩態的時候,物體的總
Spring3.0學習1.1(模擬spring)
class tor cati 3.0 -- turn user users spring3.0 層次劃分 面向抽象編程 帶來極大的靈活性 IOC(DI) 依賴註入 控制反轉: 正式使用spring IOC 控制反轉 不用自己寫實現 由容器完成 建議使用appic
BZOJ2428 HAOI2006均分數據(模擬退火)
-- bzoj read const 隨機 sin bsp har ++ 顯然可以狀壓dp。顯然過不了。 考慮暴力模擬退火。每次隨機改變一個數所屬集合即可。 並不明白要怎麽調參。 #include<iostream> #include<cs
洛谷P1337 [JSOI2004]平衡點 / 吊打XXX(模擬退火)
pan print mat targe efi 就是 ans show turn 傳送門 先坑著,聯賽活著回來的話我就寫(意思就是我絕對不會寫了) 1 //minamoto 2 #include<cstdio> 3 #include<
A除以B (20) (模擬除法)
題目描述 本題要求計算A/B,其中A是不超過1000位的正整數,B是1位正整數。你需要輸出商數Q和餘數R,使得A = B * Q + R成立。 輸入描述: 輸入在1行中依次給出A和B,中間以1空格分隔。 輸出描述: 在1行中依次輸出Q和R,中
Berland Fair CodeForces - 1073D(模擬題)
題意:n個數排成一個圓盤,一個人有T元錢,從第一個開始,只要他能買的,他一定會買,這樣依次迴圈,直到他的錢不能買任何物品時結束,問,他能買多少件東西。 思路:按題意模擬即可,不過T太大,考慮優化,優化的方法是當n個數的最大值都比T小,並且n個數的sum也小於T時,我們直接一次性買n個即可。
HDU 6023-Automatic Judge(模擬題)
分析 主要就是多次ac取時間最短的那次。 -=和%=1000的問題 如果沒有ac則罰時不計,都知道的 我卻忘考慮了。 #include<bits/stdc++.h> using namespace std; const int maxn=1e5+5; struct
多級反饋佇列排程(模擬實現)
演算法描述(來自百度): 1、程序在進入待排程的佇列等待時,首先進入 優先順序最高的Q1等待。 2、首先排程優先順序高的佇列中的程序。若高優先順序中佇列中已沒有排程的程序,則排程次 優先順序佇列中的程序。例如:Q1,Q2,Q3三個佇列,當且僅當在Q1中沒有程序等待時才去排程Q2,同理,
Luogu3936 Coloring(模擬退火)
裸退火,每次交換兩個格子即可。依舊不會調參,稍微抄了點引數並且把隨機種子設成了一個神奇的數字終於過掉了。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #
pat 甲級 1080(模擬題)
題目連結:https://pintia.cn/problem-sets/994805342720868352/problems/994805387268571136 思路: 1、題目大意是,模擬高考錄取學生的過程,每個學生有三種成績 (1)GE錄取成績(2)GI面試成績(3)最終成績GF
pat 甲級 1100(模擬題)
題目連結:https://pintia.cn/problem-sets/994805342720868352/problems/994805367156883456 思路:(1)整行輸入,分別對數字和字串處理 (2)對字串要判斷是一串還是兩串,然後判斷是十位還是個位 (3)對數字判斷十位
Django 專案總結(3)- 第三方登入(QQ登入)
第三方登入(QQ 登入) 根據 qq 開發文件 oauth2.0 QQ 登入流程: 前端頁面點選 QQ 登入,需要跳轉到 QQ 的登入頁面,但是前端不知道 QQ 的登入連結,所以先想後端傳送請求,由伺服器生成 QQ 登入頁地址,返回給前端; 使用者在