一 网络基础知识
1.URL(Uniform Resource Locator)统一资源定位符
格式: <METHOD>://<HOSTNAME:PORT>/<PATH>/<FILE>
其中:
Method是传输协议:
HOSTNAME是文档和服务器所在的Internet主机名,
PORT是服务端口号,
PATH是路径名,
FILE是文件名。
2.HTTP(HyPerText Transfer Protocol)
超文本传输协议,是互联网上采用的最广泛的一种网络协议。从游览器发送html请求,服务器找到html页面内容并回传到本地浏览器的一种协议。
3.二维数组的创建
int[][] a = new int[3][4];
int[][] b = new int[3][];
b[0] = new int[4];
b[1] = new int[5];
b[2] = new int[2];
4.二维数组的遍历
先遍历一维数组,再遍历一维数组中的每一个元素
二 Http协议的两种请求方式
1.GET请求方式
A:默认的请求方式
B:服务器主动获取数据
C:数据的传递方式:追加到Url后边,格式如下:
pathUrl?参数名=参数值&参数名=参数值
?:用于分割路径和参数
=:采用参数名=参数值的方式传递,服务器端通过参数名字获取参数的值
&:多个参数用&区分
D:容易乱码
E:只能传递少量数据
2.POST请求方式
A:向服务器写数据,数据的传递方式是写给服务器
B:不容易乱码
C:可以传递大量的数据
3.两种方式的比较:
A:GET方式是从服务器上获取数据 POST方式是向服务器传送数据。
B:GET方式请求的参数会在URL上以键=值对的方式展示出来,这里会有大小限制,也不安全,可以看到敏感信息。
C:POST方式请求的参数被封装起来以流的形式发送给服务端,没有大小限制,相对安全。看不到敏感信息。(推荐)
三 HTTP协议访问
1.首先由客户端(可以是浏览器B/S,也可以是客户端程序C/S),向服务器端发送请求。(可能传递数据,比如登录)
2.服务器端接收客户端的请求,并给与处理
3.服务器端将响应返回给客户端,表示应答请求。
4.本次客户端与服务器端的交互结束。连接断开。
四 HTTP请求头
Host
Accept
Accept-Language
Accept-Encoding
Connection
当HTML表单中的数据被提交时,表单的域名与值被编码并通过HTTP的GET或者POST方法把请求发送给服务器这里的编码方法采用了一个非常早期的通用的URI百分号编码方法.按这套方法编码的数据的MIME类型是application/x-www-form-urlencoded
五 JDK使用GET方式访问HTTP
使用JAVA官方提供的HttpUrlConnection类来实现客户端访问服务器
访问流程:
得到访问地址 java.net.URL
得到网络访问对象,设置请求参数(过期时间,输入、输出流、访问方式,请求属性Content-Type:application/x-www-form-urlencoded),进行连接 java.net.HttpURLConnection
输出流写入参数到请求中
得到返回值 responseCode
如果返回值正常,网络是以流的形式得到返回的数据
操作步骤:
step1:提供范文服务器端的Url(String类型)
step2:通过Url创建URL(java.net.URL)对象
step3:通过URL对象获取访问网络对象:
url.openConnection()--->HttpUrlConnection
step4:设置请求参数:
setConnectTimeOut(5000);//设置连接超时
setRequestMethod("GET/POST");//设置请求方式,默认为get请求,参数字母必须全部大写
setDoInput(true);//打开输入流,用于从服务器端获取数据,默认为True
setDoOutput(true);//打开输出流,用于向服务器端写数据,默认为False
附加:如果此处的请求方式为POST请求,并且有数据在发送请求时传递给服务器端,则需要打开输出流,并且获取输出流
httpUrlConnection.getOutputStream()--->OutputStream
将数据写给服务器端:String params = "username=admin&password=123456"
step5:获取响应状态码
httpUrlConnection.getResponseCode()---->200,表示OK,404,找不到访问路径
step6:从响应对象中获取输入流,获取服务器端的响应数据
httpResponse.getInputStream()--->InputStream
六 Apache使用GET方式访问HTTP
访问流程:
得到访问地址 HttpGet(有参数提供参数)
得到网络访问对象HttpClient,进行连接
得到返回值
如果返回值正常,返回得到的数据对象HttpEntity,得到数据流
操作步骤:
step1:导入Apache提供的jar包
step2:提供访问服务器端的Url(String类型)
step3:创建HttpClient对象:
HttpClient为接口类型,所以创建其实现类:DefaultHttpClient
step4:根据访问的路径地址,创建请求方式对象:get请求或者是post请求:
HttpGet(baseUrl);
HttpPost(baseUrl);
附加:如果要客户端使用POST请求方式,向服务器端传递数据,需要先创建载体对象:HttpEntity。然后将数据放在HttpEntity中,再将HttpEntity挂在到HttpPost请求方式。
NameValuePair pair1 = new BasicNameValuePair("名","值");
List<NameValuePair> list = new ArrayList();
HttpEntity entity = new UrlEncodedFormEntity(list);
httpPost.setEntity(entity);
step5:使用HttpClient操作HttpGet或者是HttpPost对象,得到响应对象
httpClient.execute(httpGet/httpPost);--->httpResponse
step6:从响应对象中获取响应状态码:200,404
httpResponse.getStateLine().getStateCode()
step7:从响应对象中获取载体对象:HttpEntity
step8:从载体对象中获取数据
方法一:使用工具类:EntityUtils
EntityUtils.toByteArray(httpEntity);--->byte[]
EntityUtils.toString(httpEntity,"utf-8");--->String
方法二:使用IO流
httpEntity.getContent()--->InputStream
一、HTTP请求报文:
一个HTTP请求报文由四个部分组成:请求行、请求头部、空行、请求数据
(一)、请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如 GET /data/info.html HTTP/1.1
方法字段就是HTTP使用的请求方法,比如常见的GET/POST
其中HTTP协议版本有两种:HTTP1.0/HTTP1.1 可以这样区别:
HTTP1.0对于每个连接都的建立一次连接一次只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Host字段;
而HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段。
(二)、请求头部
请求头部是 字段名:值 的格式展现
用于HTTP请求中的常用请求头字段
Accept: 用于高速服务器,客户机支持的数据类型
Accept-Charset: 用于告诉服务器,客户机采用的编码格式
Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式
Accept-Language:客户机的语言环境
Host: 客户机通过这个头高速服务器,想访问的主机名
If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间
Referer: 客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链)
User-Agent: 客户机通过这个头告诉服务器,客户机的软件环境
Cookie: 客户机通过这个头可以向服务器带数据
Connection: 处理完这次请求后是否断开连接还是继续保持连接
Date: 当前时间值
(三)、空行
空行的表现形式很直接,就是一个空行
它的作用是通过一个空行,告诉服务器请求头部到此为止
(四)、请求数据
若方法字段是GET,则此项为空,没有数据
若方法字段是POST,则通常来说此处放置的就是要提交的数据
比如要使用POST方法提交一个表单,其中有name字段中数据为“xiaoming",age字段为17
那么这里的请求数据就是 name=xiaoming&age=17 使用&来连接各个字段
二、HTTP响应报文:
HTTP响应报文也由三部分组成:响应行、响应头、响应体
(一)、响应行
响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK
其中协议版本HTTP/1.1 或者HTTP/1.0
200就是它的状态码,OK则为它的描述
(二)、响应头
响应头通常也是由 字段名:值 组成
响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
常见的响应头字段:
Location: 这个头配合302状态码使用,用于告诉客户找谁。
Server: 服务器通过这个头告诉浏览器服务器的类型。
Content-Encoding: 服务器通过这个头告诉浏览器数据的压缩格式。
Content-Length: 服务器通过这个头告诉浏览器回送数据的长度
Content-Type: 服务器通过这个头告诉浏览器回送数据的类型
Last-Modified: 告诉浏览器当前资源的最后缓存时间
Refresh: 告诉浏览器隔多久刷新一次
Content-Disposition:告诉浏览器以下载方式打开数据
Transfer-Encoding: 告诉浏览器数据的传送格式
ETag: 缓存相关的头
其中三种禁止浏览器缓存的头字段:
Expires:告诉浏览器把回送的资源缓存多长时间 -1或0则是不缓存
Cache-Control:no-cache
Pragma:no-cache
服务器通过以上两个头,也就是控制浏览器不要缓存数据