java,
java,
【黑马训练营】网络编程_Part5_Internet编程基础
---------------------- android培训、java培训、期待与您交流! ----------------------
URL
URL的中文全称为全球统一定位符,它主要由以下几个部分组成:
协议 主机名 :端口号 资源名
举例说明:有一个URL为http://192.168.0.1:8080/index.jsp
那么在这个URL中,http表示协议,192.168.0.1表示主机名,8080表示需要访问的端口号,index.jsp表示需要获取的资源名
在URL中,协议名和主机名对大小写不敏感,资源名对大小写往往是敏感的
相对URL:
为了扩展URL可以访问的资源范围,还可以使用相对URL来访问服务器上的资源
相对URL的格式通常为/a.html ../a.html a.html之类,表示需要访问服务器上的哪个资源
其中/a.html ../a.html是相对路径,相对路径指的就是相对于服务器所在的路径来说,该资源在什么地方
URL编码规则:
1、将空格转换为加号("+")
2、a-z A-Z 0-9保持不变
3、对于所有其他的字符,均转换成这个字符的当前字符集编码在内存中的16进制数表示,并在每个字节前面加上一个"%"
例如:字符"+"用%2B表示,每个中文字符在内存中占有2个字节,例如“中”就用%D6%D0表示
*在java.net包中提供了URLDecoder和URLEncoder两个类,来实现URL编码和解码
HTTP协议
HTTP协议规定了www浏览器从网络上获取网页的形式
当使用HTTP协议获取网络上的某个服务器上的资源时,如果不指定访问服务器的哪个端口号,那么HTTP协议就会自动访问服务器的80端口
HTTP协议的会话过程:
目前所使用的HTTP协议版本为HTTP1.1,该版本最大的特点是支持持久连接
在HTTP1.0中,客户端每次向服务器端发送请求时,只要服务器返回了客户端请求的数据,客户端就会自动断开与服务器端的连接
而在HTTP1.1中,客户端会首先与服务器建立连接,然后就可以通过这个连接与服务器进行通信,最后客户端再主动断开与服务器的连接
一个完整的HTTP请求消息中,包括一个请求行,若干消息头,以及请求内容
一个完整的HTTP响应消息中,包括一个状态行,若干消息头,以及实体内容
其中消息头之间是一行行隔开的,消息头和内容之间也有一个空行
几个常用的HTTP消息头:
Connection:指定处理完本次请求/响应后,客户端和服务器是否还保持连接,设置值可为Keep-Alive和close
Accept-Language:用于指出客户端希望服务器返回的文档所使用的国家语言,可以指定多个以逗号分隔的国家语言
Content-Length:用于表示实体内容的长度(字节数)
Range:用于指定服务器只需要返回文档中部分内容及内容范围,可以指定A-B,A-和-B三种格式
Content-Range:用于指定服务器返回的部分实体内容的位置信息,例如Content-Range:bytes 2543-4532/7898,其中7898为总字节数
编程实例:
通过HttpURLConnection对象连接到Google服务器,请求获取简体中文页面
并打印出请求的消息头,Google服务器返回的消息头和实体内容
view plaincopy to clipboardprint?- import java.io.BufferedReader;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- public class GetGoogle {
- public static void main(String args[]) throws Exception{
- getContentByLanguage("ja");
- }
- public static void getContentByLanguage(String country) throws Exception{
- //创建URL请求对象,并设置请求参数
- URL urlGoogle = new URL("http://www.google.com.hk");
- HttpURLConnection googleConnection = (HttpURLConnection)urlGoogle.openConnection();
- googleConnection.setRequestProperty("Accept-Language", country); //设置请求参数
- //获取所有的请求参数列表,并遍历打印出其中所有的参数值
- Map <String, List<String>> requestMap = googleConnection.getRequestProperties();
- Set <String> requestKeys = requestMap.keySet();
- System.out.println("===========requestFields===========");
- for (String key: requestKeys) {
- System.out.println(key + " : " + googleConnection.getRequestProperty(key));
- }
- //获取服务器返回的所有应答参数列表,并遍历打印出所有的参数值
- Map <String, List<String>> responseMap = googleConnection.getHeaderFields();
- Set <String> responseKeys = responseMap.keySet();
- System.out.println("===========responseFields===========");
- for (String key: responseKeys) {
- System.out.println(key + " : " + googleConnection.getHeaderField(key));
- }
- //获取Conncection的输入流,并通过输入流从目标网页上读取内容
- InputStream in = googleConnection.getInputStream();
- BufferedReader br = new BufferedReader(new InputStreamReader(in));
- System.out.println("===========pageContent===========");
- String strLine = br.readLine();
- while (strLine != null) {
- System.out.println(strLine);
- strLine = br.readLine();
- }
- //释放资源
- br.close();
- googleConnection.disconnect();
- }
- }
相关文章
- 暂无相关文章
用户点评