美文网首页
3HTTP协议详解

3HTTP协议详解

作者: Henrytong | 来源:发表于2018-02-16 19:05 被阅读4次

    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();
            } 
        }
    }
    
    

    相关文章

      网友评论

          本文标题:3HTTP协议详解

          本文链接:https://www.haomeiwen.com/subject/hhvptftx.html