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服务器返回的消息头和实体内容

  1. import java.io.BufferedReader;  
  2. import java.io.InputStream;  
  3. import java.io.InputStreamReader;  
  4. import java.net.HttpURLConnection;  
  5. import java.net.URL;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8. import java.util.Set;  
  9.   
  10. public class GetGoogle {  
  11.     public static void main(String args[]) throws Exception{  
  12.         getContentByLanguage("ja");  
  13.     }  
  14.       
  15.     public static void getContentByLanguage(String country) throws Exception{  
  16.         //创建URL请求对象,并设置请求参数   
  17.         URL urlGoogle = new URL("http://www.google.com.hk");  
  18.         HttpURLConnection googleConnection = (HttpURLConnection)urlGoogle.openConnection();  
  19.         googleConnection.setRequestProperty("Accept-Language", country); //设置请求参数   
  20.           
  21.         //获取所有的请求参数列表,并遍历打印出其中所有的参数值   
  22.         Map <String, List<String>> requestMap = googleConnection.getRequestProperties();  
  23.         Set <String> requestKeys = requestMap.keySet();  
  24.         System.out.println("===========requestFields===========");  
  25.         for (String key: requestKeys) {  
  26.             System.out.println(key + " : " + googleConnection.getRequestProperty(key));  
  27.         }  
  28.           
  29.         //获取服务器返回的所有应答参数列表,并遍历打印出所有的参数值   
  30.         Map <String, List<String>> responseMap = googleConnection.getHeaderFields();  
  31.         Set <String> responseKeys = responseMap.keySet();  
  32.         System.out.println("===========responseFields===========");  
  33.         for (String key: responseKeys) {  
  34.             System.out.println(key + " : " + googleConnection.getHeaderField(key));  
  35.         }  
  36.           
  37.         //获取Conncection的输入流,并通过输入流从目标网页上读取内容   
  38.         InputStream in = googleConnection.getInputStream();  
  39.         BufferedReader br = new BufferedReader(new InputStreamReader(in));  
  40.         System.out.println("===========pageContent===========");  
  41.         String strLine = br.readLine();  
  42.         while (strLine != null) {  
  43.             System.out.println(strLine);  
  44.             strLine = br.readLine();  
  45.         }  
  46.           
  47.         //释放资源   
  48.         br.close();  
  49.         googleConnection.disconnect();  
  50.     }  
  51. }  

     

    ---------------------- android培训java培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值