[02] URL和HttpURLConnection类
1、URL的概念
<METHOD>://<HOSTNAME:PORT>/<PATH>/<FILE>
<METHOD>://<HOSTNAME:PORT>/<PATH>/<FILE>
- Method是传输协议
- HOSTNAME是文档和服务器所在的Internet主机名(域名系统中DNS中的点地址)
- PORT是服务端口号(可省略)
- PATH是路径名
- FILE是文件名
2、URL类

3、HttpURLConnecttion类以及请求发送
URL url = new URL("http://www.sun.com/");//先要创建一个URL对象
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();//获得URLConnection对象
URL url = new URL("http://www.sun.com/");//先要创建一个URL对象
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();//获得URLConnection对象
- 设置请求头信息和请求体
- 建立连接
- 获取响应
public static void sendRequest(String link, String RequestMethod, String postContent) {
System.out.println("============sendRequest start, access link: " + link + " ============");
try {
URL url = new URL(link);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//step1:设置请求头信息和请求体
//设置请求方式
connection.setRequestMethod(RequestMethod); //GET或POST等
connection.setDoOutput(postContent == null ? false : true); //是否需要输出数据,默认false
connection.setDoInput(true); //是否需要获取输入,默认true
//设置部分常规的请求头参数
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("User-Agent", "Mozilla/5.0"); //可以不设置,但部分网站会对该字段进行检查,以过滤非浏览器的请求
//设置请求体内容
if (postContent != null) {
OutputStream out = connection.getOutputStream();
out.write(postContent.getBytes());
out.close();
}
//step2:建立连接
//建立连接
connection.connect();
//step3:获取响应
//获取响应头
System.out.println("------------acquire response header start------------");
Map header = connection.getHeaderFields();
Set<String> keys = header.keySet();
for (String key : keys) {
String val = connection.getHeaderField(key);
System.out.println(key + ":" + val);
}
System.out.println("------------acquire response header end------------");
//获取响应体
System.out.println("------------acquire response body start------------");
InputStream in = connection.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] cache = new byte[2048];
int size = -1;
while ((size = in.read(cache)) != -1) {
out.write(cache, 0, size);
}
out.close();
in.close();
String responseBody = out.toString();
System.out.println("response body:" + responseBody);
System.out.println("------------acquire response body end------------");
//获取响应码
int responseCode = connection.getResponseCode();
System.out.println("responseCode:" + responseCode);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("============sendRequest end============");
}
public static void sendRequest(String link, String RequestMethod, String postContent) {
System.out.println("============sendRequest start, access link: " + link + " ============");
try {
URL url = new URL(link);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//step1:设置请求头信息和请求体
//设置请求方式
connection.setRequestMethod(RequestMethod); //GET或POST等
connection.setDoOutput(postContent == null ? false : true); //是否需要输出数据,默认false
connection.setDoInput(true); //是否需要获取输入,默认true
//设置部分常规的请求头参数
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("User-Agent", "Mozilla/5.0"); //可以不设置,但部分网站会对该字段进行检查,以过滤非浏览器的请求
//设置请求体内容
if (postContent != null) {
OutputStream out = connection.getOutputStream();
out.write(postContent.getBytes());
out.close();
}
//step2:建立连接
//建立连接
connection.connect();
//step3:获取响应
//获取响应头
System.out.println("------------acquire response header start------------");
Map header = connection.getHeaderFields();
Set<String> keys = header.keySet();
for (String key : keys) {
String val = connection.getHeaderField(key);
System.out.println(key + ":" + val);
}
System.out.println("------------acquire response header end------------");
//获取响应体
System.out.println("------------acquire response body start------------");
InputStream in = connection.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] cache = new byte[2048];
int size = -1;
while ((size = in.read(cache)) != -1) {
out.write(cache, 0, size);
}
out.close();
in.close();
String responseBody = out.toString();
System.out.println("response body:" + responseBody);
System.out.println("------------acquire response body end------------");
//获取响应码
int responseCode = connection.getResponseCode();
System.out.println("responseCode:" + responseCode);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("============sendRequest end============");
}
4、关于connect()和触发请求发送
- connection.getHeaderFields(); //获取响应头属性集合
- connection.getInputStream(); //获取响应输入流
- connection.getResponseCode(); //获取响应状态码
public static void sendRequest(String link, String RequestMethod, String postContent) {
System.out.println("============sendRequest start, access link: " + link + " ============");
try {
URL url = new URL(link);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//step1:设置请求头信息和请求体
//设置请求方式
connection.setRequestMethod(RequestMethod); //GET或POST等
connection.setDoOutput(postContent == null ? false : true); //是否需要输出数据,默认false
connection.setDoInput(true); //是否需要获取输入,默认true
//设置部分常规的请求头参数
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("User-Agent", "Mozilla/5.0"); //可以不设置,但部分网站会对该字段进行检查,以过滤非浏览器的请求
//设置请求体内容
if (postContent != null) {
OutputStream out = connection.getOutputStream();
out.write(postContent.getBytes());
out.close();
}
//step2:建立连接
//建立连接
connection.connect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("============sendRequest end============");
}
public static void sendRequest(String link, String RequestMethod, String postContent) {
System.out.println("============sendRequest start, access link: " + link + " ============");
try {
URL url = new URL(link);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//step1:设置请求头信息和请求体
//设置请求方式
connection.setRequestMethod(RequestMethod); //GET或POST等
connection.setDoOutput(postContent == null ? false : true); //是否需要输出数据,默认false
connection.setDoInput(true); //是否需要获取输入,默认true
//设置部分常规的请求头参数
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("User-Agent", "Mozilla/5.0"); //可以不设置,但部分网站会对该字段进行检查,以过滤非浏览器的请求
//设置请求体内容
if (postContent != null) {
OutputStream out = connection.getOutputStream();
out.write(postContent.getBytes());
out.close();
}
//step2:建立连接
//建立连接
connection.connect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("============sendRequest end============");
}
public static void main(String[] args) {
//为了Fiddler抓包而设置的代理
System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8888");
//test code
String link = "http://www.sctywd.com/login.jsp";
sendRequest(link, "GET", null); //无法发出HTTP请求
}
public static void main(String[] args) {
//为了Fiddler抓包而设置的代理
System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8888");
//test code
String link = "http://www.sctywd.com/login.jsp";
sendRequest(link, "GET", null); //无法发出HTTP请求
}

- connect()可以多次调用,但第一次之后的调用都会被自动忽略,即只会调用一次
- 请求信息只能在连接建立之前修改,一旦连接建立,再试图修改请求信息会出现错误
- 建立在连接之上的一些方法,会隐性地调用connect()
connection.connect();
connection.setRequestMethod("GET");//抛出异常 java.net.ProtocolException: Can't reset method: already connected
connection.connect();
connection.setRequestMethod("GET");//抛出异常 java.net.ProtocolException: Can't reset method: already connected

5、其他
6、参考链接
[02] URL和HttpURLConnection类的更多相关文章
- HttpURLConnection类
导语 java.net.HttpURLConnectin类是URLConnection类的抽象子类.它在处理协议为HTTP的URL时特别有效.具体而言,它通过它可以获取和设置请求方法,确定是否重定向, ...
- JDK下sun.net.www.protocol.http.HttpURLConnection类-----Http客户端实现类的实现分析
HttpClient类是进行TCP连接的实现类, package sun.net.www.http; import java.io.*; import java.net.*; import java. ...
- 一个用php实现的获取URL信息的类
获取URL信息的类 使用这个类,你能获得URL的如下信息: - Host - Path - Statuscode (eg. 404,200, ...) - HTTP Version - Ser ...
- HttpURLConnection类的使用
此类以获取天气的一个api地址为例: package javaexcjs; import java.io.BufferedReader; import java.io.OutputStreamWrit ...
- url提交参数类
url提交参数类 type /// <summary> /// 准备url /// </summary> TynUrl = class private FUrl, FComma ...
- UrlUtils工具类,Java URL工具类,Java URL链接工具类
UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...
- Django 02 url路由配置及渲染方式
Django 02 url路由配置及渲染方式 一.URL #URL #(Uniform Resoure Locator) 统一资源定位符:对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是 ...
- HttpURLConnection访问url的工具类
java代码: import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; ...
- Android基于HttpUrlConnection类的文件下载
/** * get方法的文件下载 * <p> * 特别说明 android中的progressBar是google唯一的做了处理的可以在子线程中更新UI的控件 * * @param pat ...
随机推荐
- 正则表达式+XML+反射+设计模式作业
正则表达式+XML+反射+设计模式作业 一. 填空题 Class.forName('com.bjsxt.stumgr.entity.Student').newInstance( ); 语句的作用 ...
- 从零开始学习html(八)CSS选择器——下
六.子选择器 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" ...
- ionic3 细节注意
一.图标和splash大小不一样 icon图标的大小尽量为1024*1024,并且不能为圆角. splash图片的大小尽量为2732*2732,ionic1的大小为2208*2208
- 网络基础 Windows控制台下Ftp使用简介
Windows控制台下Ftp使用简介 by:授客 QQ:1033553122 测试环境: ftp服务器所在主机ip:172.25.75.2 ftp用户目录:F:\ftp C:\Users\laif ...
- Expo大作战(三十九)--expo sdk api之 DocumentPicker,Contacts(获取手机联系人信息),Branch
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- [20170705]diff比较执行结果的内容.txt
[20170705]diff比较执行结果的内容.txt --//有时候需要比较2个命令输出的结果进行比较,比较笨的方法如下,例子: $ lsnrctl status LISTENER_SCAN2 & ...
- python第九十天----jquery
jQuery http://jquery.cuishifeng.cn/ 相当于js的模块,类库 DOM/BOM/JavaScript的类库 一.查找元素 jQuery 选择器 直接找到某个或者某个标签 ...
- 始终使用属性(Property),而不是字段(Data Member)
1.始终使用属性(Property),而不是字段(Data Member) C# 属性已经晋升为一等公民,如果你的类中还有public的字段,Stop.访问属性和字段的方式是一样的,但是属性是用方法( ...
- 用Python实现数据结构之树
树 树是由根结点和若干颗子树构成的.树是由一个集合以及在该集合上定义的一种关系构成的.集合中的元素称为树的结点,所定义的关系称为父子关系.父子关系在树的结点之间建立了一个层次结构.在这种层次结构中有一 ...
- python曲线拟合
http://blog.sina.com.cn/s/blog_aed5bd1d0102vid7.html 1.多项式拟合范例: import matplotlib.pyplot as plt impo ...