[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 ...
随机推荐
- wangEditor-基于javascript和css开发的 Web富文本编辑器, 轻量、简洁、易用、开源免费(2)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Ubuntu 16.04 LTS 下安装 ibus-rime 输入法
搜 Linux 下粤拼输入法的时候发现了 Rime,由于 fcitx 下的拼音输入体验实在不太好(搜狗是在我的电脑上完全坏掉了,调不出来,配置文件的问题一直没解决:谷歌是好过没有),于是安装 ibus ...
- CentOS7系列--安装Chrome浏览器
CentOS7系列--安装Chrome浏览器 1. 创建yum源文件 [root@server20 ~]# cd /etc/yum.repos.d/ [root@server20 yum.repos. ...
- Windows下使用Rtools编译R语言包
使用devtools安装github中的R源代码时,经常会出各种错误,索性搜了一下怎么在Windows下直接打包,网上的资料也是参差不齐,以下是自己验证通过的. 一.下载Rtools 下载地址:htt ...
- 《ASP.NET MVC企业实战》(二) MVC开发前奏
在上一篇“<ASP.NET MVC企业级实战>(一)MVC开发前奏”中记录了作者介绍的一些比较实用的VS使用方法以及C#2.0中添加的新特性.本篇继续大概了解之后版本的一些新特性. ...
- Android View体系(一)视图坐标系
前言 Android View体系是界面编程的核心,他的重要性不亚于Android四大组件,在这个系列中我会陆续讲到View坐标系.View的滑动.View的事件分发等文章来逐步介绍Android V ...
- Handle的原理(Looper、Handler、Message三者关系)
转载请注明出处:http://blog.csdn.net/lowprofile_coding/article/details/72580044 介绍 前面的内容对Handler做了介绍,也讲解了如何使 ...
- (网页)jQuery的时间datetime控件在AngularJs中使用实例
百度一下,自己也想了一下,有一种简单,无脑的方式分享给你: <input ng-model="start" id="start" placeholder= ...
- SQL Server 中的回滚
USE [TestDB] GO /****** 对象: Table [dbo].[Person] 脚本日期: 11/23/2008 13:37:48 ******/ SET ANSI_NULLS ON ...
- 代理ARP--善意的欺骗
1. 代理ARP(Proxy ARP)是什么? 顾名思义,它指通过中间设备(通常为Router)代替其他主机响应ARP请求.对于没有配置默认网关的主机想要与其他网络的另一台主机通信时,网关收到源主机的 ...