[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 ...
随机推荐
- 消息队列&Celery&RabbitMQ&zeromq
一.消息队列 什么是消息队列? “消息队列”是在消息的传输过程中保存消息的容器. “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. 消息 ...
- python中的清屏函数
一:cmd中python的清屏函数 import os os.system("cls") cmd中演示 1.在cmd中输入命令行: 2.执行后: 3.为什么会遗留一个0? 因为函数 ...
- Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...
- 【Java入门提高篇】Day27 Java容器类详解(九)LinkedList详解
这次介绍一下List接口的另一个践行者——LinkedList,这是一位集诸多技能于一身的List接口践行者,可谓十八般武艺,样样精通,栈.队列.双端队列.链表.双向链表都可以用它来模拟,话不多说,赶 ...
- [20180403]访问dba_autotask_task无输出问题.txt
[20180403]访问dba_autotask_task无输出问题.txt --//链接http://www.itpub.net/thread-1911421-1-1.html的讨论,还没注意原先的 ...
- SQL Server 2005详细安装过程及配置
说明:个人感觉SQL Server 2005是目前所有的SQL Server版本当中最好用的一个版本了,原因就是这个版本比起其它版本来说要安装简单,操作简便,只可惜这个版本只能在Windows7或者低 ...
- c# 百度地图api APP SN校验失败
在使用c#调用百度地图Web服务api遇到的签名(sn校验)问题,在此记录一下,(ip白名单校验的请忽略) 1.首先获取ak与sk,这个两个东西可以从控制台中获取到 2.在这个地址:sn签名算法,里面 ...
- 1.2 Spyder的基本使用
[TOC] 1.0 Spyder的基本使用 1.Spyder的主题与文字修改: 2.Spyder的使用技巧: (一)安装Anaconda: 官网下载:https://www.anaconda.com/ ...
- IntelliJ IDEA src下新建包, 没有层级结构
新建项目后再src先右键点击新建包 com.example , 然后想在com.example 包中包含其他包, 当点击src新建包后,出现如图的情况 解决: 继续在src上右键新建package ...
- Xmind破解
原始教程 http://df1551e3.wiz03.com/share/s/3v5l7z2wdQVs2llAUc0C_-n_2cPZVe0kEA2n2iw1Ay1ApF_o