3HTTP協(xié)議詳解

Web核心+HTTP協(xié)議

    準(zhǔn)備工作:XAMPP+PhpWindd+Aglieone
    HTTP協(xié)議簡介
    HTTP請求
        最常用請求
            GET請求獲取URL所標(biāo)識的資源
            POST請求在URL所標(biāo)識的資源后附加新的數(shù)據(jù)
            請求參數(shù)所代表的意義
                content-Length內(nèi)容大小
                content-Type內(nèi)容類型
                Server服務(wù)器類型
                等等
        不常用請求
            HEAD請求獲取由Request-URL所標(biāo)識的資源的響應(yīng)消息報頭
            OPTIONS請求查詢服務(wù)器的性能慷嗜,或查詢與資源相關(guān)的選項和需求
            PUT請求服務(wù)器存儲一個資源碰凶,并用URL作為其標(biāo)識
            DELETE請求服務(wù)器刪除由URL所標(biāo)識的資源
            TRACE請求服務(wù)器回送收到的請求信息型诚,主要用于測試或診斷
    HTTP響應(yīng) 
        HTTP
            網(wǎng)絡(luò)協(xié)議版本
        Server
            服務(wù)器版本
        Data    
            服務(wù)器處理頁面的時間姑子,格林威治時間+8小時=北京時間
        content-Type
            告訴服務(wù)器傳輸數(shù)據(jù)類型
        transfer-encoding   
            數(shù)據(jù)分塊傳輸寻定,響應(yīng)后需要拼接
        X-UA-compatible
            瀏覽器的兼容性
        HTTP字段含義較多蓖租,不一一總結(jié)了
        學(xué)習(xí)方法
            善于結(jié)合工具進行分析
            字段的理解缭保,歸納常用字段信息
    HTTP-Session
        無狀態(tài)的缺失
        Session ID
            一個回話的ID號蘸朋,用來唯一標(biāo)識客戶端
                比如進行登錄時就需要對session進行保存
            鍵值對
            保存在服務(wù)器端
            清除catch和cooki信息
            cookie的作用域
    HTTP-Cookie
        鍵值對形式
        保存在客戶端
        比如使用cookie保存用戶登錄時長
    實戰(zhàn):Fiddler協(xié)議監(jiān)控工具使用
        暴力破解
        重編譯url
    實戰(zhàn):HTTPWatch協(xié)議分析
    實戰(zhàn):RestClient手動發(fā)送請求
    實戰(zhàn):論壇自動灌水-Java
        測試類型
            業(yè)務(wù)
            場景
            技術(shù)
        梳理思路
            GET,POST,Session,Cookie
            如何與論壇發(fā)帖關(guān)聯(lián)起來
            1.GET,POST請求如何發(fā)送
                get請求
                    創(chuàng)建一個get請求方法
                        1.建立連接
                            HttpURLConnection對象
                            URL對象
                            將URL對象轉(zhuǎn)換為HttpURLConnection對象
                        2. 設(shè)置請求參數(shù)
                            urlConnection.setConnectTimeout(5000);
                        3. 獲取響應(yīng)內(nèi)容
                            bf = new BuffereReader(new ImputStreamReader(urlConnection.getInputStream(),"UTF-8"))
                            String line = bf.readLine();
                        4. 在main函數(shù)中調(diào)用該方法
                post請求
                    多了一個給服務(wù)器發(fā)送的正文
                        創(chuàng)建一個寫文件的標(biāo)準(zhǔn)對象,獲取getOutputStream輸出流
                            pw = new PrintWriter(urlConnection.getOutputStream());
                        傳送給服務(wù)器的參數(shù),即post的正文
                            pw.print(paramValue);
                            pw.flush();
            2.JAVA如何維護Session
                想辦法獲取到變量和值
                在響應(yīng)的內(nèi)容進行查找cookie
                    將用Java代碼獲取到的cookie信息發(fā)給服務(wù)器
                Java的字符串處理操作

相關(guān)代碼和注釋詳解

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*; // 跟網(wǎng)絡(luò)相關(guān)的包都在Java.net下
import java.util.List;
import java.util.Map;

public class JavaHTTPHandle {

    private String globalCookie = "";
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        JavaHTTPHandle jhh = new JavaHTTPHandle(); // 實例化類JavaHTTPHandle
        // jhh.sendGet("http://www.baidu.com",""); // 調(diào)用自定義的sendGet方法
        jhh.sendPost("https://cloud.ravvar.cn/account/login/username", "username=darseek1&password=123456","");
        jhh.sendPost("https://cloud.ravvar.cn/account/login/username", "username=darseek1&password=123456",jhh.globalCookie);
    }

    public void sendGet(String urlAddress,String cookieValue) {// 第一步創(chuàng)建一個get請求
        
        try {
            // 建立連接并發(fā)送請求
            HttpURLConnection urlConnection = null; // 實例化對象
            URL url = new URL(urlAddress); // 實例化對象韩容,打開URL地址;用字符串參數(shù)的形式進行傳遞
            // URL與HttpURLConnection的類型不一致款违,在轉(zhuǎn)換的時候需要強制轉(zhuǎn)換,將URL父對象轉(zhuǎn)換為HttpURLConnection子對象群凶。
            urlConnection = (HttpURLConnection)url.openConnection(); // 建立了鏈接并且訪問了url地址
            //  設(shè)置請求里的發(fā)送參數(shù)
            urlConnection.setConnectTimeout(5000);
            urlConnection.setReadTimeout(5000);
            urlConnection.setUseCaches(false);
            // urlConnection.setRequestProperty("cookie", "x=y"); //設(shè)置cookie請求值
            urlConnection.connect(); // 將get請求發(fā)送給服務(wù)器
            
            // 獲取響應(yīng)內(nèi)容,可選項;從輸入流InputStreamReader里面讀取響應(yīng)內(nèi)容urlConnection.getInputStream()插爹,讀取后放到緩沖區(qū)
            BufferedReader bf = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"UTF-8"));
            
            // 將緩沖區(qū)內(nèi)容一行行輸出出來
            String line = bf.readLine(); // 讀取第一行內(nèi)容
            while (line !=null) { // 循環(huán)到一行中沒有內(nèi)容時停止
                System.out.println(line);
                line = bf.readLine();       // 循環(huán)一次讀一行
            }
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        
        
    }
    
    public void sendPost(String urlAddress,String paramValue,String cookieValue) {
        try {
            // 建立連接并發(fā)送請求
            HttpURLConnection urlConnection = null; // 實例化對象
            URL url = new URL(urlAddress); // 實例化對象,打開URL地址;用字符串參數(shù)的形式進行傳遞
            // URL與HttpURLConnection的類型不一致请梢,在轉(zhuǎn)換的時候需要強制轉(zhuǎn)換赠尾,將URL父對象轉(zhuǎn)換為HttpURLConnection子對象。
            urlConnection = (HttpURLConnection)url.openConnection(); // 建立了鏈接并且訪問了url地址
            //  設(shè)置請求里的發(fā)送參數(shù)
            urlConnection.setConnectTimeout(5000);
            urlConnection.setReadTimeout(5000);
            urlConnection.setDoOutput(true); // 接受輸出
            urlConnection.setUseCaches(false);
            urlConnection.setRequestProperty("Cookie", cookieValue);
            urlConnection.connect(); // 將get請求發(fā)送給服務(wù)器
            
            // 創(chuàng)建一個寫文件的標(biāo)準(zhǔn)對象,獲取getOutputStream輸出流
            PrintWriter pw = new PrintWriter(urlConnection.getOutputStream());
            pw.print(paramValue); // 傳送給服務(wù)器的參數(shù)毅弧,即post的正文气嫁,比如用戶名和密碼
            pw.flush();
            
            // 獲取響應(yīng)內(nèi)容,可選項;從輸入流InputStreamReader里面讀取響應(yīng)內(nèi)容urlConnection.getInputStream(),讀取后放到緩沖區(qū)
            BufferedReader bf = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"UTF-8"));
            // 將緩沖區(qū)內(nèi)容一行行輸出出來
            String line = bf.readLine(); // 讀取第一行內(nèi)容
            while (line !=null) { // 循環(huán)到一行中沒有內(nèi)容時停止
                System.out.println(line);
                line = bf.readLine();       // 循環(huán)一次讀一行
            }
            
//          urlConnection.getHeaderField("Set-Cookie")  // 獲取響應(yīng)頭中Set-Cookie對應(yīng)的值
             Map<String,List<String>> map = urlConnection.getHeaderFields(); // 獲取所有響應(yīng)頭里的信息
             List list = (List)map.get("Set-Cookie"); // 取出Set-Cookie相關(guān)的信息
             for (int i=0;i<list.size();i++) { // 取出list中的所有行
                 // 從每一行中獲取關(guān)鍵字
                 String temp = list.get(i).toString(); // 定義一個變量
                 String value[] = temp.split(";"); // 定義一個數(shù)組够坐,使用分號進行分割
                 this.globalCookie += value[0] + ";"; // 定義一個全局變量來存放數(shù)組中獲取到的第一個字段,并進行拼裝
                 System.out.println(globalCookie);
                 
             }
             
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寸宵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子元咙,更是在濱河造成了極大的恐慌梯影,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庶香,死亡現(xiàn)場離奇詭異甲棍,居然都是意外死亡,警方通過查閱死者的電腦和手機赶掖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門救军,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人倘零,你說我怎么就攤上這事唱遭。” “怎么了呈驶?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵拷泽,是天一觀的道長。 經(jīng)常有香客問我袖瞻,道長司致,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任聋迎,我火速辦了婚禮脂矫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘霉晕。我一直安慰自己庭再,他們只是感情好捞奕,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拄轻,像睡著了一般颅围。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恨搓,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天院促,我揣著相機與錄音,去河邊找鬼斧抱。 笑死常拓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辉浦。 我是一名探鬼主播墩邀,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盏浙!你這毒婦竟也來了眉睹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤废膘,失蹤者是張志新(化名)和其女友劉穎竹海,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丐黄,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡斋配,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了灌闺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艰争。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖桂对,靈堂內(nèi)的尸體忽然破棺而出甩卓,到底是詐尸還是另有隱情,我是刑警寧澤蕉斜,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布逾柿,位于F島的核電站,受9級特大地震影響宅此,放射性物質(zhì)發(fā)生泄漏机错。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一父腕、第九天 我趴在偏房一處隱蔽的房頂上張望弱匪。 院中可真熱鬧,春花似錦璧亮、人聲如沸萧诫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽财搁。三九已至蘸炸,卻和暖如春躬络,著一層夾襖步出監(jiān)牢的瞬間尖奔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工穷当, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留提茁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓馁菜,卻偏偏與公主長得像茴扁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子汪疮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,262評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理峭火,服務(wù)發(fā)現(xiàn),斷路器智嚷,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • 單例模式 單例模式卖丸,是一種常用的軟件設(shè)計模式。在它的核心結(jié)構(gòu)中只包含一個被稱為單例的特殊類盏道。通過單例模式可以保證系...
    暖熊熊閱讀 132評論 0 0
  • 時光匆匆稍浆,不知不覺,已過了好久猜嘱。前天去爬山衅枫,發(fā)現(xiàn)自己好像沒有啥變化±柿妫看到滿山的行人弦撩,忽然覺得這是不是就是人生呢...
    超__越閱讀 402評論 0 0
  • 今天試用微信讀書。我開始沒明白论皆,為什么明明有qq閱讀孤钦,還做了微信讀書。用著的瞬間纯丸,突然好深刻的覺得社交類的產(chǎn)品好強...
    迷惘魚薦書閱讀 344評論 0 0