关于Get和Post的学习笔记(五)
一 .Get和Post的优缺点
1. Get
> 优点: 编写起来比较简单,只要在地址后面拼接数据即可。
> 缺点: 提交的数据有长度限制、安全性比较差
2.Post
> 优点: 提交的数据没有长度限制、使用的是流的方式提交,安全性比较高
> 缺点: 编写起来比较麻烦
二.使用POST方式提交数据
1. 定位资源
String path = "http://10.0.2.2:8080/QQ/LoginServlet";
URL url = new URL(path);
2. 打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
3. 设置请求方式
//1.设置请求的方式: post
conn.setRequestMethod("POST"); // post 大写
4. 设置提交的数据类型
//2. 设置提交的数据类型
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
5. 设置提交的数据长度
String data = "qq="+qq+"&pwd="+pwd;
//3. 设置提交的数据长度
conn.setRequestProperty("Content-Length", data.length()+"");
6. 打开输出流
//4.先打开输出流
conn.setDoOutput(true);
7. 开始往服务器写数据
//5.开始写数据
OutputStream os = conn.getOutputStream();
os.write(data.getBytes());
os.close();
8. 获取服务器返回的数据(与Get一样)
三.中文乱码问题
1. 服务器返回数据出现乱码
> 服务器返回数据的时候,请使用UTF-8进行编码
> 服务器使用默认的码表编码,客户端使用GBK的码表进行解码
> 注意: Tomcat服务器在返回数据的时候,默认先使用本地的码表进行编码,如果本地的码表不支持这个字符,那么在使用ISO-8859-1码表去编码
2. 客户端提交中文的时候出现乱码
2.1. 客户端提交的时候要进行中文的URL编码
2.2. 服务器要进行解码
由于tomcat服务器在获取到数据的时候,默认使用的是ISO-8859-1的码表进行编码,但是客户端那边使用的是UTF-8的码表,所以必须先让字符串回到最初的状态,然后在进行解码
String newPwd = new String (pwd.getBytes("ISO-8859-1") , "UTF-8") ;
四. 使用HttpClient提交数据步骤-post
1. 定义客户端
//1.创建客户端
HttpClient client = new DefaultHttpClient();
2. 定义请求
String path = "http://10.0.2.2:8080/QQ/LoginServlet";
//2.定义一个post请求
HttpPost request = new HttpPost(path);
3. 给请求封装数据实体(Get方式省略此步骤)
//定义带上的参数集合
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
//给集合装上两个参数, qq -- pwd
parameters.add(new BasicNameValuePair("qq", qq));
parameters.add(new BasicNameValuePair("pwd", pwd));
//定义一个数据实体 如果有中文,编码应该在new实体对象的时候设置。
HttpEntity entity = new UrlEncodedFormEntity(parameters ,"utf-8");
//3.给post请求设置参数
request.setEntity(entity);
4. 执行请求
//3执行一个get请求
HttpResponse res = client.execute(request);
5. 根据响应对象判断状态码
//4.获取状态码
int code = res.getStatusLine().getStatusCode();
if(code ==200){
。。。
}
6. 从响应对象获取数据内容
//5.获取响应对象里面的数据实体,然后获取输入流
InputStream is = res.getEntity().getContent();
//服务器返回的数据
String result = StreamTools.readStream(is);
多线程下载
网络数据访问
> 线程并发
为什么多线程下载速度比较快
> 多个线程同时瓜分服务器的资源,每个人都等分得到内容。单位时间内,获取到的资源就变多了。
> 多线程下载的速率也受客户端的下行带宽和服务器的上行带宽限制。
###多线程断点续传
1. 在写入数据的时候,保存起来当前的下载量。
2. 在进来的时候,开始下载前,必须要读取以前的保存位置,然后从这个位置开始下载
3. 跳转的位置也要注意一下,并不是以前的startIndex
关于Get和Post的学习笔记(五)的更多相关文章
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- java之jvm学习笔记五(实践写自己的类装载器)
java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...
- python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍
python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍 IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.pycharm免费社区版.Su ...
- Go语言学习笔记五: 条件语句
Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...
- 【opencv学习笔记五】一个简单程序:图像读取与显示
今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...
随机推荐
- 使用lock_sga和pre_page_sga参数保证SGA常驻物理内存 .
Lock_sga LOCK_SGA locks the entire SGA into physical memory. It is usually advisable to lock the SGA ...
- windows下搭建及配置mantis缺陷管理工具
在windows XP 操作系统下,如何更快.更容易地搭建及配置mantis缺陷管理工具呢?以下是我实践的具体步骤: 一.安装mantis的前提环境,需要先安装Apache HTTP Server2. ...
- react-native 环境配置及hello world
一.前言 最近手头的工作繁多,有研究性的项目和系统研发,正好遇到同事离职,接手了框架的UI组件,不仅需要维护和填坑,还需要开发新的功能组件.因为身在H5-Hybird的框架部门,最近团队开始尝试使用R ...
- JDBC插入百万数据,不到5秒!
java自带的批量操作,就可以很好的支持大量数据的处理.相比c#,简单很多.c#要使用oracle提供的ODP.NET,效率才很高,但是代码却很复杂.总之,在这方面,c#没得比.当然,这里的表是没加索 ...
- js IP 正则表达式
//^((25[0-5]|2[0-4]\d|[01]?\d\d?)($|(?!\.$)\.)){4}$//((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\ ...
- 使用ICE进程间通信时,IP和端口的选择
使用ICE进程间通信时,IP和端口的选择 服务器在创建时使用的Endpint格式为 tcp -h IP地址 -p 端口 1.IP地址的选择 如果填某个网卡的地址,则只在这个地址上监听,客户端必须连这 ...
- 认识Java里面的Thread
在一个特定的主线程执行的过程中,如果我们还需要在主线程的过程中插播一个线程,做其他动作.那么我们就可以利用Java的Thread类,创建一个新的线程. 一:线程简单实现的三种方式 (1)第一种创建线程 ...
- php number_format()保留小数点后几位有效数的函数 千位分组来格式化数字(转)
PHP保留小数点后2位的函数number_format number_format(带小数点的书,小数点后保留的位数) number_format(8.3486,2); //取得小数点后2位有效数/ ...
- YouComplete:vim自动补全插件
在github上下载插件,按照README.md安装 1,ubuntu安装 vim插件管理:vundle插件安装同样按照 README.md 操作 2,user guide General Usage ...
- 反调试技术(Delphi版)
1.程序窗口句柄检测原理:用FindWindow函数查找具有相同窗口类名和标题的窗口,如果找到就说明有OD在运行//****************************************** ...