Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1663|回复: 0

使用HttpUrlConnection发送/接收数据

[复制链接]

该用户从未签到

发表于 2011-10-20 11:21:51 | 显示全部楼层 |阅读模式
HttpURLConnection是java中用来进行网络连接的类,可以用来模拟浏览器执行一些网络相关操作。HttpURLConnection支持http协议中的get请求和post请求。可以用来模拟登陆或者爬取网页源代码获得数据等等。使用HttpURLConnection需要注意以下一些方面:

1.使用HttpURLConnection要记得释放IO资源,尤其是当调用getContentLength()方法获得文件长度,这时其实已经隐含的打开了io需要我们手动的再获得一次inputstream,然后在关闭这个inputstream。
  2.使用HttpURLConnection时要注意设置超时,有两个设置方法setConnectTimeout()和setReadTimeout()这两个一定要设置,尤其是多次大量进行连接的时候更要设置这两个方法,否则容易造成程序在读某个连接的时候僵死在那,导致程序无法继续进行.

我们来看与其相关的一个类:

URL类:

URL(Uniform Resource Locator)统一资源定位符,可以直接使用此类找到互联网上的资源(如一个简单的网页)。URL类的常用方法:

●public URL(String spec) throws MalformedURLException 根据指定的地址实例化URL对象

●public URL(String protocol,String host,int port,String file)  throws MalformedURLException   实例化URL对象,并指定协议、主机、端口名称、资源文件

●public URLConnection openConnection()  throws IOException  取得一个URLConnection对象

●public final InputStream openStream()  throws IOException    取得输入流

URLConnection
URLConnection是封装访问远程网络资源一般方法的类,通过它可以建立与远程服务器的连接,检查

远程资源的一些属性。此类的常用方法如下:

●public int getContentLength()   取得内容的长度

●public String getContentType()   取得内容的类型

●public InputStream getInputStream()  throws IOException    取得连接的输入流

URLConnection对象可以通过URL类的openConnection()方法取得,下面通过URLConnection对象取得一个URL的基本信息。

例:取得URL的基本信息。

HttpURLConnection是java中用来进行网络连接的类,可以用来模拟浏览器执行一些网络相关操作。HttpURLConnection支持http协议中的get请求和post请求。可以用来模拟登陆或者爬取网页源代码获得数据等等。使用HttpURLConnection需要注意以下一些方面:

1.使用HttpURLConnection要记得释放IO资源,尤其是当调用getContentLength()方法获得文件长度,这时其实已经隐含的打开了io需要我们手动的再获得一次inputstream,然后在关闭这个inputstream。
  2.使用HttpURLConnection时要注意设置超时,有两个设置方法setConnectTimeout()和setReadTimeout()这两个一定要设置,尤其是多次大量进行连接的时候更要设置这两个方法,否则容易造成程序在读某个连接的时候僵死在那,导致程序无法继续进行.

我们来看与其相关的一个类:

URL类:

URL(Uniform Resource Locator)统一资源定位符,可以直接使用此类找到互联网上的资源(如一个简单的网页)。URL类的常用方法:

●public URL(String spec) throws MalformedURLException 根据指定的地址实例化URL对象

●public URL(String protocol,String host,int port,String file)  throws MalformedURLException   实例化URL对象,并指定协议、主机、端口名称、资源文件

●public URLConnection openConnection()  throws IOException  取得一个URLConnection对象

●public final InputStream openStream()  throws IOException    取得输入流

URLConnection
URLConnection是封装访问远程网络资源一般方法的类,通过它可以建立与远程服务器的连接,检查

远程资源的一些属性。此类的常用方法如下:

●public int getContentLength()   取得内容的长度

●public String getContentType()   取得内容的类型

●public InputStream getInputStream()  throws IOException    取得连接的输入流

URLConnection对象可以通过URL类的openConnection()方法取得,下面通过URLConnection对象取得一个URL的基本信息。

例:取得URL的基本信息。
  1. package org.lxh.demo19.inetaddressdemo;
  2. import java.net.URL;
  3. import java.net.URLConnection;
  4. public class URLConnectionDemo {
  5. public static void main(String args[])throws Exception{
  6.    URL url = new URL("http://localhost:8080/demo/Example/scripletdemo01.jsp");
  7.    URLConnection urlCon = url.openConnection();//建立连接
  8.    System.out.println("内容大小:"+ urlCon.getContentLength());
  9.    System.out.println("内容类型:"+ urlCon.getContentType());
  10. }
  11. }
复制代码

输出:
内容大小:19
内容类型:text/HTML;charset=ISO-8859-1



URLEncoder与URLDecoder

在使用URL访问时,经常会看到在地址后会有很多其他的附带信息。从这些地址的附带信息上可以发现英文单词可以正常显示,但是对于中文,则会将其进行一系列的编码操作,在Java中如果要完成这样的编码和解码操作就必须使用URLEncoder与URLDecoder两个类。URLEncoder可以为传递的内容进行解码。这两个类的常用方法分别如下:

URLEncoder类的常用方法

●public static String encode(String s,String enc) throws UnsuppertedEncodingException  
使用指定的编码机制将字符串转换为applicaion/x-www-form-urlencoded格式

URLDecoder类的常用方法
●public static String decode(String s,String enc) throws UnsuppertedEncodingException  
使用指定的编码机制对applicaion/x-www-form-urlencoded字符串解码

例:编码及解码操作
  1. package org.lxh.demo19.inetaddressdemo;
  2. import java.net.URLDecoder;
  3. import java.net.URLEncoder;
  4. public class CodeDemo {
  5. public static void main(String args[])throws Exception{
  6.    String keyWord = "baidu 狐狸";
  7.    //对内容进行编码
  8.    String encod = URLEncoder.encode(keyWord,"UTF-8");
  9.    System.out.println("编码之后的内容:" + encod);
  10.    //对内容进行解码
  11.    String decod = URLDecoder.decode(encod,"UTF-8");
  12.    System.out.println("解码之后的内容:" + decod);
  13.    }
  14. }
复制代码

输出:
编码之后的内容:baidu+%E7%8B%90%E7%8B%B8
解码之后的内容:baidu 狐狸



以上程序将内容通过URLEncoder编码成UTF-8的形式,之后再通过URLDecoder按照UTF-8进行解码。



下面我们来看一个加强版的HttpUrlConnection例子:
  1. public static void main(String[] args) throws Exception{
  2.     URL url = new URL("http://localhost:8080/SocketDemo/servlet/BK");
  3.     HttpURLConnection conn = (HttpURLConnection)url.openConnection();
  4.     conn.setReadTimeout(5000); //设置超时时间
  5.     conn.setDefaultUseCaches(false); //默认不使用缓存
  6.     conn.setDoInput(true);  //允许从连接读取信息
  7.     conn.setDoOutput(true); //允许向连接发送信息
  8.     conn.setRequestMethod("POST");
  9.     //取得输出流
  10.     PrintWriter pw = new PrintWriter(conn.getOutputStream());
  11.     //encode message
  12.     String name = "name="+URLEncoder.encode("张三", "UTF-8");
  13.     String pwd = "pwd="+URLEncoder.encode("123", "UTF-8");
  14.     pw.print(name+"&"+pwd); //发送
  15.     pw.close();
  16.    
  17.     System.out.println("=========== 信息已经发送===========");
  18.    
  19.     //读出响应数据
  20.     InputStream ins = conn.getInputStream();
  21.     BufferedReader br = new BufferedReader(new InputStreamReader(ins));
  22.     String str = null;
  23.     while((str=br.readLine())!=null){
  24.         System.out.println(str);
  25.     }
  26.     ins.close();
  27.    
  28. }
复制代码
回复

使用道具 举报

该用户从未签到

发表于 2011-10-25 08:31:23 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-16 06:02 , Processed in 0.327691 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表