zoukankan      html  css  js  c++  java
  • urlconnection用法(转)

    1.获取ip地址

    package demo.net;

     

    import java.net.InetAddress;

    import java.net.UnknownHostException;

     

    /*

     * 获取指定IP的主机名

     */

    public class IPScanner {

     

    // 传入IP地址,返回主机名称,若主机不可达则返回ip地址的字符串形式

    public static String scanner(byte[] ip) {

    InetAddress addr = null;

    try {

    addr = InetAddress.getByAddress(ip);

    catch (UnknownHostException e) {

    e.printStackTrace();

    }

    return addr.getHostName();

    }

     

    public static void main(String[] args) {

    String hostName;

    String ip;

    for (int i = 0; i <= 127; i++) {

    ip = "59.68.255." + i;

    hostName = scanner(new byte[] { 59, 68, (byte) 255, (byte)i });

    if (!ip.equals(hostName))

    System.out.println(ip +" : "+hostName);

    }

    }

    }

     

     2.获取html文本

    package demo.net;

     

    import java.io.IOException;

    import java.net.URL;

    import java.util.Scanner;

     

    /*

     * URL类用法示例,URL是统一资源定位符,可以打开到达一个资源的流,从而获取资源的内容

     * 示例中获取武汉工业学院首页的内容,返回的内容是html文本

     */

    public class URLDemo {

    public static void main(String[] args) {

    try {

    URL url = new URL("http://www.whpu.edu.cn");

    Scanner in = new Scanner(url.openStream());

    while (in.hasNextLine())

    System.out.println(in.nextLine());

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    3.获取html文本

    package demo.net;

     

    import java.io.IOException;

    import java.net.URL;

    import java.net.URLConnection;

    import java.util.Scanner;

     

    /*

     * URLConnection类是一个抽象类,定位到资源后可以读取资源内容且获得头信息

     * 同时也可以用来提交表单数据,此示例展示获取资源及头信息

     */

    public class URLConnectionDemo {

    public static void main(String[] args) {

    try {

    // 1、通过在 URL 上调用 openConnection 方法创建连接对象。

    URL url = new URL("http://www.whpu.edu.cn");

    URLConnection connection = url.openConnection();

    // 2、处理设置参数和一般请求属性。

    connection.setDoInput(true);

    connection.setDoOutput(true);

    // 3、使用 connect 方法建立到远程对象的实际连接。

    connection.connect();

    // 4、远程对象变为可用。远程对象的头字段和内容变为可访问。

    System.out.println(connection.getContentType());

    System.out.println(connection.getContentEncoding());

    System.out.println(connection.getContentLength());

    System.out.println(connection.getDate());

    // 读取内容

    Scanner in = new Scanner(connection.getInputStream());

    while (in.hasNextLine())

    System.out.println(in.nextLine());

     

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    4.总结

    a:) HttpURLConnection的connect()函数,实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求。无论是post还是get,http请求实际上直到HttpURLConnection的getInputStream()这个函数里面才正式发送出去。

    b:) 在用POST方式发送URL请求时,URL请求参数的设定顺序是重中之重,对connection对象的一切配置(那一堆set函数)都必须要在connect()函数执行之前完成。而对outputStream的写操作,又必须要在inputStream的读操作之前。这些顺序实际上是由http请求的格式决定的。如果inputStream读操作在outputStream的写操作之前,会抛出异常:java.net.ProtocolException: Cannot write output after reading input.......

    c:) http请求实际上由两部分组成,一个是http头,所有关于此次http请求的配置都在http头里面定义,一个是正文content。connect()函数会根据HttpURLConnection对象的配置值生成http头部信息,因此在调用connect函数之前,就必须把所有的配置准备好。

    d:) 在http头后面紧跟着的是http请求的正文,正文的内容是通过outputStream流写入的,实际上outputStream不是一个网络流,充其量是个字符串流,往里面写入的东西不会立即发送到网络,而是存在于内存缓冲区中,待outputStream流关闭时,根据输入的内容生成http正文。至此,http请求的东西已经全部准备就绪。在getInputStream()函数调用的时候,就会把准备好的http请求正式发送到服务器了,然后返回一个输入流,用于读取服务器对于此次http请求的返回信息。由于http请求在getInputStream的时候已经发送出去了(包括http头和正文),因此在getInputStream()函数之后对connection对象进行设置(对http头的信息进行修改)或者写入outputStream(对正文进行修改)都是没有意义的了,执行这些操作会导致异常的发生。

     

    更详细的URLConnection类解析内容请参考:http://www.blogjava.net/supercrsky/articles/247449.html

  • 相关阅读:
    算法----(1)冒泡排序
    淘宝爬虫
    爬虫_豆瓣电影top250 (正则表达式)
    爬虫_猫眼电影top100(正则表达式)
    Android 简单调用摄像头
    Android 简单天气预报
    思维模型
    This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you
    Android studio preview界面无法预览,报错render problem
    Android studio 3.1.2报错,no target device found
  • 原文地址:https://www.cnblogs.com/sm21312/p/3909835.html
Copyright © 2011-2022 走看看