心得16--网络编程7-Url-解密IE的神秘面纱

来源:互联网 发布:红色复仇软件破解版 编辑:程序博客网 时间:2024/05/01 10:21

1.  URL(Uniform Resource Locator)代表统一资源定位器,统一资源定位器是指互联网“资源”的名称。资源可以是简单的文件或目录,也可以是对跟为复杂的对象的引用,例如:对数据库或搜索引擎的查询。通常URL可以由协议名、主机、端口号和资源组成。URL的格式为“protocol://host:port/resourceName”。例如:http://ww.csdn.index.htm.

2. URL创建对象有两种:一种是绝对地址,URL url= new URL(“http://www.baidu.com”);还有一种相对地址,URL urla= new URL(“http://www.baidu.com”);URLurl = new URL(url,“a.html”);

3. URL的方法:

   以一实例来演示这些方法的简单用法。

packagecom.Url;

importjava.net.MalformedURLException;

importjava.net.URL;

publicclass Demo {

   /**

    * @param args

    * @throws MalformedURLException

    */

   publicstaticvoid main(String[] args)throws MalformedURLException {

      URL url = new URL("http://java.sun.com:80/docs/books/tutorial"

               +"/index.html?name=networking#DOCWNLOADING");

//下面就是各种方法的用法:

      System.out.println("filename= "+ url.getFile());  //filename=path+query

     System.out.println("protocol= "+ url.getProtocol());

     System.out.println("authority= "+ url.getAuthority()); //授权,公司签名 authority=host+port

     System.out.println("host ="+ url.getHost());

     System.out.println("port ="+ url.getPort());

     System.out.println("path ="+ url.getPath());

     System.out.println("query ="+ url.getQuery());

     System.out.println("rel ="+ url.getRef());    //获取锚点

   }

}

/*

 *执行结果

 filename = /docs/books/tutorial/index.html?name=networking

protocol=http

authority= java.sun.com:80

host= java.sun.com

port= 80

path= /docs/books/tutorial/index.html

query= name=networking

rel =DOCWNLOADING

 */

   另外还有方法:

URLConnectionopenConnection():返回一个URLConnection对象,它表示到URL所引用的远程对象的连接。

InputStreamopenStream():打开与此URL的连接,并返回一个用于读取URL资源的InputStream.

4.  URLDecoder类和URLEncoder类用于完成普通字符串和application/x-www-form-urlencoded MIME字符串之间的相互转换。这就可以解释我们在用IE浏览器时地址栏中的乱码了。其实这不是乱码而是所谓的“application/x-www-form-urlencodedMIME字符串”

5. 当URL地址中含有非西欧字符的字符串时,系统会将这些非西欧字符串转换成我们认为的乱码。这里乱码与普通字符串的转换用到一下方法:

URLDecoder类中的decoder(Strings,String enc)静态方法,它可以将乱码转换成普通字符串。

URLEncoder类中的encoder(Strings,String enc)静态方法,它可以将普通字符串转换成pplication/x-www-form-urlencoded MIME字符串。

乱码转换详细请看下面实例:

packagecom.Url;

importjava.io.UnsupportedEncodingException;

importjava.net.URLDecoder;

importjava.net.URLEncoder;

publicclass TestUrl {

   /**

    * 演示浏览器地址栏中的乱码与字符串的互相转换

    * @param args

    */

   publicstaticvoid main(String[] args) {

      try {

         //将普通字符串转换成application/x-www-form-urlencoded字符串

         String str1 = URLEncoder.encode("java程序","UTF8");

         System.out.println(str1);

         //application/x-www-form-urlencoded转换成字符串普通字符串

         String str2 = URLDecoder.decode("编码转换成字符串:...."+"java%E7%A8%8B%E5%BA%8F","UTF-8");

         System.out.println(str2);

      } catch (UnsupportedEncodingException e) {

         System.out.println(e.getMessage());//返回此throwable 的详细消息字符串。

         /*e.printStackTrace();  将此throwable 及其追踪输出至标准错误流。

        此方法将此 Throwable对象的堆栈跟踪输出至错误输出流,作为字段 System.err的值。

        输出的第一行包含此对象的 toString()方法的结果。

        剩余行表示以前由方法 fillInStackTrace()记录的数据*/

      }

   }

}

6. 需要注意的是:

    仅包含西欧字符的普通字符串和pplication/x-www-form-urlencodedMIME字符串无需转换,而包含中文字符的普通字符串则需要转换。转换的方法是每个中文字符占两个字节,每个字节可以转换成两个十六进制的数字,所以每个中文字符将转换成%XX%XX的形式。当然,采用不同的字符集时,每个中文字符对应的字节数并不完全相同,所以使用URLEncoder和URLDecoder进行转换时也需要指定字符集

   通过程序下载网页信息。案例分析:

packagecom.Url;

importjava.io.BufferedReader;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.InputStreamReader;

importjava.net.URL;

publicclass UrlDemo {

/**

    * @param args

    * @throws IOException

    */

   publicstaticvoid main(String[] args)throws IOException {

      URL url = new URL("http://www.baidu.com");

      BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));

      FileOutputStream fos = new FileOutputStream("d:\\baidu.html");

      String line = null;

      while((line=br.readLine())!=null) {

         fos.write(line.getBytes());

         System.out.println(line);

      }

      fos.close();

      br.close();

   }

}

 

原创粉丝点击