3HTTP协议详解

Web核心+HTTP协议

    准备工作:XAMPP+PhpWindd+Aglieone
    HTTP协议简介
    HTTP请求
        最常用请求
            GET请求获取URL所标识的资源
            POST请求在URL所标识的资源后附加新的数据
            请求参数所代表的意义
                content-Length内容大小
                content-Type内容类型
                Server服务器类型
                等等
        不常用请求
            HEAD请求获取由Request-URL所标识的资源的响应消息报头
            OPTIONS请求查询服务器的性能,或查询与资源相关的选项和需求
            PUT请求服务器存储一个资源,并用URL作为其标识
            DELETE请求服务器删除由URL所标识的资源
            TRACE请求服务器回送收到的请求信息,主要用于测试或诊断
    HTTP响应 
        HTTP
            网络协议版本
        Server
            服务器版本
        Data    
            服务器处理页面的时间,格林威治时间+8小时=北京时间
        content-Type
            告诉服务器传输数据类型
        transfer-encoding   
            数据分块传输,响应后需要拼接
        X-UA-compatible
            浏览器的兼容性
        HTTP字段含义较多,不一一总结了
        学习方法
            善于结合工具进行分析
            字段的理解,归纳常用字段信息
    HTTP-Session
        无状态的缺失
        Session ID
            一个回话的ID号,用来唯一标识客户端
                比如进行登录时就需要对session进行保存
            键值对
            保存在服务器端
            清除catch和cooki信息
            cookie的作用域
    HTTP-Cookie
        键值对形式
        保存在客户端
        比如使用cookie保存用户登录时长
    实战:Fiddler协议监控工具使用
        暴力破解
        重编译url
    实战:HTTPWatch协议分析
    实战:RestClient手动发送请求
    实战:论坛自动灌水-Java
        测试类型
            业务
            场景
            技术
        梳理思路
            GET,POST,Session,Cookie
            如何与论坛发帖关联起来
            1.GET,POST请求如何发送
                get请求
                    创建一个get请求方法
                        1.建立连接
                            HttpURLConnection对象
                            URL对象
                            将URL对象转换为HttpURLConnection对象
                        2. 设置请求参数
                            urlConnection.setConnectTimeout(5000);
                        3. 获取响应内容
                            bf = new BuffereReader(new ImputStreamReader(urlConnection.getInputStream(),"UTF-8"))
                            String line = bf.readLine();
                        4. 在main函数中调用该方法
                post请求
                    多了一个给服务器发送的正文
                        创建一个写文件的标准对象,获取getOutputStream输出流
                            pw = new PrintWriter(urlConnection.getOutputStream());
                        传送给服务器的参数,即post的正文
                            pw.print(paramValue);
                            pw.flush();
            2.JAVA如何维护Session
                想办法获取到变量和值
                在响应的内容进行查找cookie
                    将用Java代码获取到的cookie信息发给服务器
                Java的字符串处理操作

相关代码和注释详解

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*; // 跟网络相关的包都在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",""); // 调用自定义的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) {// 第一步创建一个get请求
        
        try {
            // 建立连接并发送请求
            HttpURLConnection urlConnection = null; // 实例化对象
            URL url = new URL(urlAddress); // 实例化对象,打开URL地址;用字符串参数的形式进行传递
            // URL与HttpURLConnection的类型不一致,在转换的时候需要强制转换,将URL父对象转换为HttpURLConnection子对象。
            urlConnection = (HttpURLConnection)url.openConnection(); // 建立了链接并且访问了url地址
            //  设置请求里的发送参数
            urlConnection.setConnectTimeout(5000);
            urlConnection.setReadTimeout(5000);
            urlConnection.setUseCaches(false);
            // urlConnection.setRequestProperty("cookie", "x=y"); //设置cookie请求值
            urlConnection.connect(); // 将get请求发送给服务器
            
            // 获取响应内容,可选项;从输入流InputStreamReader里面读取响应内容urlConnection.getInputStream(),读取后放到缓冲区
            BufferedReader bf = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"UTF-8"));
            
            // 将缓冲区内容一行行输出出来
            String line = bf.readLine(); // 读取第一行内容
            while (line !=null) { // 循环到一行中没有内容时停止
                System.out.println(line);
                line = bf.readLine();       // 循环一次读一行
            }
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        
        
    }
    
    public void sendPost(String urlAddress,String paramValue,String cookieValue) {
        try {
            // 建立连接并发送请求
            HttpURLConnection urlConnection = null; // 实例化对象
            URL url = new URL(urlAddress); // 实例化对象,打开URL地址;用字符串参数的形式进行传递
            // URL与HttpURLConnection的类型不一致,在转换的时候需要强制转换,将URL父对象转换为HttpURLConnection子对象。
            urlConnection = (HttpURLConnection)url.openConnection(); // 建立了链接并且访问了url地址
            //  设置请求里的发送参数
            urlConnection.setConnectTimeout(5000);
            urlConnection.setReadTimeout(5000);
            urlConnection.setDoOutput(true); // 接受输出
            urlConnection.setUseCaches(false);
            urlConnection.setRequestProperty("Cookie", cookieValue);
            urlConnection.connect(); // 将get请求发送给服务器
            
            // 创建一个写文件的标准对象,获取getOutputStream输出流
            PrintWriter pw = new PrintWriter(urlConnection.getOutputStream());
            pw.print(paramValue); // 传送给服务器的参数,即post的正文,比如用户名和密码
            pw.flush();
            
            // 获取响应内容,可选项;从输入流InputStreamReader里面读取响应内容urlConnection.getInputStream(),读取后放到缓冲区
            BufferedReader bf = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"UTF-8"));
            // 将缓冲区内容一行行输出出来
            String line = bf.readLine(); // 读取第一行内容
            while (line !=null) { // 循环到一行中没有内容时停止
                System.out.println(line);
                line = bf.readLine();       // 循环一次读一行
            }
            
//          urlConnection.getHeaderField("Set-Cookie")  // 获取响应头中Set-Cookie对应的值
             Map<String,List<String>> map = urlConnection.getHeaderFields(); // 获取所有响应头里的信息
             List list = (List)map.get("Set-Cookie"); // 取出Set-Cookie相关的信息
             for (int i=0;i<list.size();i++) { // 取出list中的所有行
                 // 从每一行中获取关键字
                 String temp = list.get(i).toString(); // 定义一个变量
                 String value[] = temp.split(";"); // 定义一个数组,使用分号进行分割
                 this.globalCookie += value[0] + ";"; // 定义一个全局变量来存放数组中获取到的第一个字段,并进行拼装
                 System.out.println(globalCookie);
                 
             }
             
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,342评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,575评论 18 139
  • 单例模式 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系...
    暖熊熊阅读 130评论 0 0
  • 时光匆匆,不知不觉,已过了好久。前天去爬山,发现自己好像没有啥变化。看到满山的行人,忽然觉得这是不是就是人生呢...
    超__越阅读 393评论 0 0
  • 今天试用微信读书。我开始没明白,为什么明明有qq阅读,还做了微信读书。用着的瞬间,突然好深刻的觉得社交类的产品好强...
    迷惘鱼荐书阅读 341评论 0 0