### 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的字符串处理操作
 

 
代码编写请求流程总结
get请求
1、导入相关的包或库
2、创建一个对象来存放信息
3、建立url连接,发送请求
4、获取服务器返回的数据
5、对获取到的数据进行处理:比如验证是否符合预期值
 
post请求
1、导入相关的包或库
2、创建一个对象来存放信息
3、建立url连接,发送请求,多了头信息和一些必要的参数值比如cookie,用户名或id之类
4、获取服务器返回的数据
5、对获取到的数据进行处理:比如验证是否符合预期值
 

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

3.HTTP协议详解的更多相关文章

  1. HTTP协议详解(转)

    转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...

  2. HTTP协议详解

    Author :Jeffrey 引言 HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展. ...

  3. 动态选路、RIP协议&&OSPF协议详解

    动态选路.RIP协议&&OSPF协议详解 概念 当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路.路由器之间必须采用选路协议进行通信,这样的选路协议 ...

  4. ASP.NET知识总结(3.HTTP协议详解)

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  5. 接口测试之HTTP协议详解

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  6. 计算机网络(12)-----HTTP协议详解

    HTTP协议详解 http请求 http请求由三部分组成,分别是:请求行.消息报头.请求正文 (1)请求行 请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Metho ...

  7. OSPF协议详解

    CCNP OSPF协议详解 2010-02-24 20:30:22 标签:CCNP 职场 OSPF 休闲 OSPF(Open Shortest Path Fitst,ospf)开放最短路径优先协议,是 ...

  8. HTTP协议详解(真的很经典)

    HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展.目前在WWW中使用的是HTTP/1.0 ...

  9. HTTP协议详解--转载http://blog.csdn.net/gueter/article/details/1524447

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  10. 关于http协议详解

    Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前 ...

随机推荐

  1. Selenium_POM架构(17)

    POM是Page Object Model的简称,它是一种设计思想,意思是,把每一个页面,当做一个对象,页面的元素和元素之间操作方法就是页面对象的属性和行为. POM一般使用三层架构,分别为:基础封装 ...

  2. Java的jar包构建成docker镜像并运行

    结构如下 把jar和Dockerfile放到一个文件,不在一个文件下会报错文件找不到 创建一个构建文件 buildimage.sh vi /home/hanby/buildimage.sh echo ...

  3. vim安装使用pathogen

    pathogen是什么? pathogen一般作为vim新手的第一个插件,用来统一管理vim插件包, (官方解释)非常容易的管理你的 'runtimepath' ,在实际项目中,vim-pathoge ...

  4. sublime text 3 添加packagecontrol

    打开sublime控制台输入 import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee1 ...

  5. SQL高级优化(五)之执行计划

    一.explain 执行计划:在MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的. explain:MySQL执行计划的工具,查看MySQL如 ...

  6. PAT 乙级 1001. 害死人不偿命的(3n+1)猜想 (15)(C语言描述)

    卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...

  7. 同步gitlab与github

    1.找到setting 2.找到左下方的developer setting 3.按标好的数字依次执行 4.填写note并勾选repo 5.在最左下方勾选 6.保存生成的新的token到其他地方,之后你 ...

  8. linux下编译支持opencl的opencv for android

    主要的步骤其他人已经写过,请参考这篇:https://www.cnblogs.com/hrlnw/p/4720977.html 操作的细节请参考附件的pdf:  https://files.cnblo ...

  9. 2022GDUT寒训专题一J题

    题目 题面 给你一个长度为 n的整数序列{A1,A2,⋯,A**n},要求从中找出一段连续的长度不超过 m的非空子序列,使得这个序列的和最大. 输入格式 第一行为两个整数 n,m: 第二行为 n个用空 ...

  10. fiddler-ios13以上信任证书后无法抓取https包

    直接下载fiddler插件原始是不兼容https://telerik-fiddler.s3.amazonaws.com/fiddler/addons/fiddlercertmaker.exe