1. 程式人生 > >HttpClient的使用(模擬登入)

HttpClient的使用(模擬登入)

HttpClient是專門設計用來簡化HTTP客戶端與伺服器間各種通訊,程式設計的,可以使複雜的事情變得簡單。

注意: 在Android SDK編譯版本為23的時,且使用HTTPClient相關類庫專案的時候,如使用HttpClient會出現無法解析的錯誤, 這是由於android 6.0 API 23) 不在提供 org.apache.http .* (只保留幾個類

HTTP請求方法中最常見的方法為 GET 與 POST: 

GET 方法:

GET方法要求伺服器將URL定位的資源放在想用報文的資料部分,會送給客戶端,使用GET方法時,請求引數和對應的值附加在URL後面,利用一個(“?”)代表

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 Server3: 對長、短連接的處理策略模擬心跳

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 登入頁地址,返回給前端; 使用者在