【Java】使用URL类访问互联网资源
Java的java.net.URL类用于请求互联网上的资源,采用HTTP/HTTPS协议,请求方法是GET方法,一般请求是静态的,少量的服务器端数据。
三种连接方法:
// 方法一
URL url = new URL("http://www.sina.com.cn"); URLConnection urlcon = url.openConnection(); InputStream is = urlcon.getInputStream();
// 方法二
URL url = new URL("http://www.yhfund.com.cn"); HttpURLConnection urlcon = (HttpURLConnection)url.openConnection(); InputStream is = urlcon.getInputStream();
// 方法三
URL url = new URL("http://www.yhfund.com.cn"); InputStream is = url.openStream();
1.使用URL类
下面通过一个示例介绍如何使用java.net.URL类:
package url;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;public class HelloWorld {public static void main(String[] args) {//Web网址String url="http://www.sina.com.cn";URL reqURL;try {reqURL=new URL(url);} catch (MalformedURLException e) {e.printStackTrace();return;}try(//打开网络通信输入流InputStream is=reqURL.openStream();InputStreamReader isr=new InputStreamReader(is,"utf-8");BufferedReader br=new BufferedReader(isr)) {StringBuilder sb=new StringBuilder();String line=br.readLine();while(line!=null){sb.append(line);sb.append('\n');line=br.readLine();}//日志输出System.out.println(sb);} catch (IOException e) {e.printStackTrace();}}}
上述代码创建URL对象,参数是一个HTTP网址。通过URL对象的openStream()方法打开输入流。
2.使用HttpURLConnection发送GET请求
由于URL类只能发送HTTP/HTTPS的GET方法请求,如果要想发送其他的情况或者对网络请求有更深入的控制,则可以使用HttpURLConnection类型。
示例代码如下:
package url;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;public class HttpURLConGET {//Web服务网址static String urlString="http://www.51work6.com/service/mynotes/WebService.php?"+"email=<此处填写在该网页注册时的邮箱>&type=JSON&action=query";public static void main(String[] args) {BufferedReader br=null;HttpURLConnection conn=null;try {URL reqURL=new URL(urlString);conn=(HttpURLConnection)reqURL.openConnection();conn.setRequestMethod("GET");//打开网络通信输入流InputStream is=conn.getInputStream();//通过is创建InputStreamReader对象InputStreamReader isr=new InputStreamReader(is,"utf-8");//通过isr创建BufferedReader对象br=new BufferedReader(isr);StringBuilder sb=new StringBuilder();String line=br.readLine();while(line!=null){sb.append(line);line=br.readLine();}//日志输出System.out.println(sb);} catch (Exception e) {e.printStackTrace();}finally {if(conn!=null){conn.disconnect();}if(br!=null){try {br.close();} catch (IOException e) {e.printStackTrace();}}}}}
注意:发送GET请求时发送给服务器的参数是放在URL的"?"之后,参数采用键值对形式。多个参数之间用“&”分隔,例如type=JSON&action=query就是两个参数。
上述代码用reqURL.openConnection()方法打开一个连接,返回URLConnetion对象。由于本次连接是HTTP连接,所以返回的是HttpURLConnection对象。URLConnection是抽象类,HttpURLConnection是URLConnection的子类。
代码中conn.setRequestMethod("GET")设置请求方法为GET方法。通过conn.getInputStream()打开输入流。通过conn.disconnect()断开连接,这可以释放资源。
3.使用HttpURLConnection发送POST请求
示例代码如下:
package url;import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpURLConPOST {//Web服务网址static String urlString="http://www.51work6.com/service/mynotes/WebService.php?";public static void main(String[] args) {BufferedReader br=null;HttpURLConnection conn=null;try {URL reqURL=new URL(urlString);conn=(HttpURLConnection)reqURL.openConnection();conn.setRequestMethod("POST");//设置请求过程中可以传递参数给服务器conn.setDoOutput(true);String param=String.format("email=%s&type=%s&action=%s","<此处填写在该网页注册时的邮箱>","JSON","query");//设置参数DataOutputStream dStream=new DataOutputStream(conn.getOutputStream());dStream.writeBytes(param);dStream.close();//打开网络通信输入流InputStream is=conn.getInputStream();//通过is创建InputStreamReader对象InputStreamReader isr=new InputStreamReader(is,"utf-8");//通过isr创建BufferedReader对象br=new BufferedReader(isr);StringBuilder sb=new StringBuilder();String line=br.readLine();while(line!=null){sb.append(line);line=br.readLine();}//日志输出System.out.println(sb);} catch (Exception e) {e.printStackTrace();}finally {if(conn!=null){conn.disconnect();}if(br!=null){try {br.close();} catch (IOException e) {e.printStackTrace();}}}}
}
上述代码URL后面不带参数,这是因为要发送的是POST请求,POST请求参数是放在请求体中。
4.案例:下载程序
Downloader.java代码如下:
package url;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;public class Downloader {//Web服务网址private static String urlString="http://ss0.bdstatic.com/5aV1bjqh_Q23odcf/"+"static/superman/img/logo/bd_logol_31bdc765.png";public static void main(String[] args) {download();}//下载方法private static void download() {HttpURLConnection conn=null;try {//创建URL对象URL reqURL=new URL(urlString);//打开连接conn=(HttpURLConnection)reqURL.openConnection();try(//从连接对象获得输入流InputStream is=conn.getInputStream();BufferedInputStream bin=new BufferedInputStream(is);//创建文件输出流OutputStream os=new FileOutputStream("download.png");BufferedOutputStream bout=new BufferedOutputStream(os)){byte[] buffer=new byte[1024];int bytesRead=bin.read(buffer);while(bytesRead!=-1){bout.write(buffer,0,bytesRead);bytesRead=bin.read(buffer);}}catch(IOException e) {}System.out.println("下载完成。");} catch (Exception e) {e.printStackTrace();}finally {if(conn!=null){conn.disconnect();}}}}
【Java】使用URL类访问互联网资源相关推荐
- 通过java.net.URL类抓取某个网页的内容 选择自 cqq 的 Blog
/** 文件名 : OpenUrl.java 描述 :通过 java.net.URL 类访问一个页面,并且返回结果 **/ import java.net.*; import java.io.*; ...
- java.net.Url类的应用 以及URL的学习
java.net.Url类的应用 认识IP.认识URL是进行网络编程的第一步.java.net.URL提供了丰富的URL构建方式,并可以通过java.net.URL来获取资源. 一.认识URL ...
- 对Java的URL类支持的协议进行扩展的方法
转载自 对Java的URL类支持的协议进行扩展的方法 JAVA默认提供了对file,ftp,gopher,http,https,jar,mailto,netdoc协议的支持.当我们要利用这些协议来 ...
- java URL java.net.URL类的使用 详细介绍 URL转义 解决URL中文字符
类 URL 代表一个统一资源定位符,它是指向互联网"资源"的指针.资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,也就是我们常说的域名.浏览器访问地址. 在Java中就 ...
- java.net.Url类的应用
认识IP.认识URL是进行网络编程的第一步.java.net.URL提供了丰富的URL构建方式,并可以通过java.net.URL来获取资源. 一.认识URL 类 URL 代表一个统一资源定 ...
- 防盗链——防止其他页面通过url直接访问本站资源
防盗链产生效果描述: 在页面中引入一个链接,在页面中点击访问这个链接(注:直接页面通过浏览器打开是无效的,需要通过服务器访问页面) 而通过地址栏与直接打开页面(不通过服务器)直接访问是返回正常的页面. ...
- Java 使用java的URL类通过url下载网络资源
主要用到的类 地址类: URL http类: HttpURLConnection 输入流: InputStream 输出流: FileOutputStream 上代码 package com.demo ...
- java 打开url连接访问不了,android 应用Java自带的HttpURLConnection 连接网络 读取返回数据...
android 使用Java自带的HttpURLConnection 连接网络 读取返回数据 @Override protected void onCreate(Bundle savedInstanc ...
- java socket 获取网页源代码_通过java.net.Socket 类抓取网页内容
/** 文件名 : Firstsocket.java 描述 :通过 java.net.Socket 类访问一个web页面,并且返回结果 作者: 慈勤强 cqq1978@yeah.net 参考:http ...
最新文章
- node 模块化 require expores,简易实现原理。
- python API docs
- python怎么实现音乐快进,python将音频进行变速的操作方法
- 海思Hi3516A(5)3D降噪
- aws集群重启_使用自动伸缩组在AWS中运行安全数据库集群
- amoeba mysql读写分离_Mysql 实现读写分离的详细教程(amoeba)
- hadoop权威指南 读书笔记
- 当《流浪地球》冲过2亿:中国的科幻大片为什么来得这么晚?
- python第一次考试_python 全栈开发,Day16(函数第一次考试)
- 基于STM32F103ZET6的多路复用模拟开关设计
- 在线ico图标制作、python代码实现ico格式转换
- MATLAB 手把手带你制作第一个APP designer程序(电子词典)
- 视频网站开发:JavaWeb做一个带自定义小表情的评论功能
- 这样做老板,企业才发展!
- 极验点选验证码位置识别(一):点选验证码位置识别技术总览
- 基于html5动画效果毕业论文,毕业设计(论文)-基于HTML5和CSS3的响应式网页制作.doc...
- linux脚本读文件的值,shell脚本如何从json文件读取一个某个值
- 2021-08-11王汕8.12黄金TD走势外汇黄金价格,现货白银TD投资操作策略
- [数据结构]图的思维导图
- 大牌网站都在用的字体,专治选择困难症!|附字体
热门文章
- Accelerated C++ 习题答案
- [Java] 蓝桥杯ALGO-148 算法训练 5-1最小公倍数
- [Java] 蓝桥杯ADV-184 算法提高 素数求和
- 【note】软件体系结构(6-10章)
- 【iOS开发】理解IBOutlet、Outlet、referencing outlet、outlet connection
- 解决librdkafka 报WARN:Protocol read buffer underflow
- Jenkins构建jmeter进行接口测试的一些配置
- 暴力破解sshd服务的密码的小技巧
- java拷贝构造函数
- java 读取使用keytool生产的keystore文件