zoukankan      html  css  js  c++  java
  • java网络编程--httpurlconnection

    HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时:
    System.setProperty("sun.net.client.defaultConnectTimeout", 超时毫秒数字符串);
    System.setProperty("sun.net.client.defaultReadTimeout", 超时毫秒数字符串);

    其中: sun.net.client.defaultConnectTimeout:连接主机的超时时间(单位:毫秒)
    sun.net.client.defaultReadTimeout:从主机读取数据的超时时间(单位:毫秒)

    URL url = new URL("http://localhost:8080/TestHttpURLConnectionPro/index.jsp"); 

    URLConnection rulConnection = url.openConnection();// 此处的urlConnection对象实际上是根据URL的 
              // 请求协议(此处是http)生成的URLConnection类 

              // 为HttpURLConnection类型的对象,以便用到 

    HttpURLConnection httpUrlConnection = (HttpURLConnection) rulConnection;

     HttpURLConnection对象参数问题 

    // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 
    // http正文内,因此需要设为true, 默认情况下是false; 
    httpUrlConnection.setDoOutput(true); 

    // 设置是否从httpUrlConnection读入,默认情况下是true; 
    httpUrlConnection.setDoInput(true); 

    // Post 请求不能使用缓存 
    httpUrlConnection.setUseCaches(false); 

    // 设定传送的内容类型是可序列化的java对象 
    // (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException) 
    httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object"); 

    // 设定请求的方法为"POST",默认是GET 
    httpUrlConnection.setRequestMethod("POST"); 

    // 连接,从上述第2条中url.openConnection()至此的配置必须要在connect之前完成, 
            httpUrlConnection.connect(); 
     
    HttpURLConnection连接问题: 
    OutputStream outStrm = httpUrlConnection.getOutputStream(); 
     
     HttpURLConnection写数据与发送数据问题: 
     
    // 现在通过输出流对象构建对象输出流对象,以实现输出可序列化的对象。 
    ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm); 

    // 向对象输出流写出数据,这些数据将存到内存缓冲区中 
    objOutputStrm.writeObject(new String("我是测试数据")); 

    // 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream) 
    objOutputStm.flush(); 

    // 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中, 
    // 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器 
    objOutputStm.close(); 

    // 调用HttpURLConnection连接对象的getInputStream()函数, 
    // 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。 
    InputStream inStrm = httpConn.getInputStream(); // <===注意,实际发送请求的代码段就在这里 

    // 上边的httpConn.getInputStream()方法已调用,本次HTTP请求已结束,下边向对象输出流的输出已无意义, 
    // 既使对象输出流没有调用close()方法,下边的操作也不会向对象输出流写入任何数据. 
    // 因此,要重新发送数据时需要重新创建连接、重新设参数、重新创建流对象、重新写数据、 
    // 重新发送数据(至于是否不用重新这些操作需要再研究) 
    objOutputStm.writeObject(new String("")); 
    httpConn.getInputStream(); 
  • 相关阅读:
    【转】Git: There is no tracking information for the current branch.
    【转】git多个远程仓库
    【转】python批量快速合并excel文件
    【转】HTML5-postMessage实现跨域
    Python3正则表达式search和findall差异讨论
    Python Segmentation fault错误定位办法
    Python3压缩和解压缩实现
    Python3+profile性能分析
    案例:ADG环境遇到redo日志member路径有误以及RMAN-6571错误
    CentOS7的udev的绑定规则
  • 原文地址:https://www.cnblogs.com/7758521gorden/p/8805690.html
Copyright © 2011-2022 走看看