urlconnection用法(转)
1.获取ip地址
package demo.net;
import java.net.InetAddress;
import java.net.UnknownHostException;
/*
* 获取指定IP的主机名
*/
public class IPScanner {
// 传入IP地址,返回主机名称,若主机不可达则返回ip地址的字符串形式
public static String scanner(byte[] ip) {
InetAddress addr = null;
try {
addr = InetAddress.getByAddress(ip);
} catch (UnknownHostException e) {
e.printStackTrace();
}
return addr.getHostName();
}
public static void main(String[] args) {
String hostName;
String ip;
for (int i = 0; i <= 127; i++) {
ip = "59.68.255." + i;
hostName = scanner(new byte[] { 59, 68, (byte) 255, (byte)i });
if (!ip.equals(hostName))
System.out.println(ip +" : "+hostName);
}
}
}
2.获取html文本
package demo.net;
import java.io.IOException;
import java.net.URL;
import java.util.Scanner;
/*
* URL类用法示例,URL是统一资源定位符,可以打开到达一个资源的流,从而获取资源的内容
* 示例中获取武汉工业学院首页的内容,返回的内容是html文本
*/
public class URLDemo {
public static void main(String[] args) {
try {
URL url = new URL("http://www.whpu.edu.cn");
Scanner in = new Scanner(url.openStream());
while (in.hasNextLine())
System.out.println(in.nextLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.获取html文本
package demo.net;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;
/*
* URLConnection类是一个抽象类,定位到资源后可以读取资源内容且获得头信息
* 同时也可以用来提交表单数据,此示例展示获取资源及头信息
*/
public class URLConnectionDemo {
public static void main(String[] args) {
try {
// 1、通过在 URL 上调用 openConnection 方法创建连接对象。
URL url = new URL("http://www.whpu.edu.cn");
URLConnection connection = url.openConnection();
// 2、处理设置参数和一般请求属性。
connection.setDoInput(true);
connection.setDoOutput(true);
// 3、使用 connect 方法建立到远程对象的实际连接。
connection.connect();
// 4、远程对象变为可用。远程对象的头字段和内容变为可访问。
System.out.println(connection.getContentType());
System.out.println(connection.getContentEncoding());
System.out.println(connection.getContentLength());
System.out.println(connection.getDate());
// 读取内容
Scanner in = new Scanner(connection.getInputStream());
while (in.hasNextLine())
System.out.println(in.nextLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
4.总结
a:) HttpURLConnection的connect()函数,实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求。无论是post还是get,http请求实际上直到HttpURLConnection的getInputStream()这个函数里面才正式发送出去。
b:) 在用POST方式发送URL请求时,URL请求参数的设定顺序是重中之重,对connection对象的一切配置(那一堆set函数)都必须要在connect()函数执行之前完成。而对outputStream的写操作,又必须要在inputStream的读操作之前。这些顺序实际上是由http请求的格式决定的。如果inputStream读操作在outputStream的写操作之前,会抛出异常:java.net.ProtocolException: Cannot write output after reading input.......
c:) http请求实际上由两部分组成,一个是http头,所有关于此次http请求的配置都在http头里面定义,一个是正文content。connect()函数会根据HttpURLConnection对象的配置值生成http头部信息,因此在调用connect函数之前,就必须把所有的配置准备好。
d:) 在http头后面紧跟着的是http请求的正文,正文的内容是通过outputStream流写入的,实际上outputStream不是一个网络流,充其量是个字符串流,往里面写入的东西不会立即发送到网络,而是存在于内存缓冲区中,待outputStream流关闭时,根据输入的内容生成http正文。至此,http请求的东西已经全部准备就绪。在getInputStream()函数调用的时候,就会把准备好的http请求正式发送到服务器了,然后返回一个输入流,用于读取服务器对于此次http请求的返回信息。由于http请求在getInputStream的时候已经发送出去了(包括http头和正文),因此在getInputStream()函数之后对connection对象进行设置(对http头的信息进行修改)或者写入outputStream(对正文进行修改)都是没有意义的了,执行这些操作会导致异常的发生。
更详细的URLConnection类解析内容请参考:http://www.blogjava.net/supercrsky/articles/247449.html
urlconnection用法(转)的更多相关文章
- URLConnection的连接、超时、关闭用法总结
Java中可以使用HttpURLConnection来请求WEB资源. 1. URL请求的类别 分为二类,GET与POST请求.二者的区别在于: a:) get请求可以获取静态页面,也可以把 ...
- URLConnection格式与用法
private void getdialog() { final EditText et = new EditText(this); final String workid = this.workid ...
- JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫
JAVA之旅(三十四)--自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫 我们接着来说网络编程,TCP 一.自定义服务端 我们直接写一个服务端,让本机去连接 ...
- 浅谈HTTP中GET、POST用法以及它们的区别
浅谈HTTP中GET.POST用法以及它们的区别 HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符.我们可以这样认为: 一 ...
- Java 中request.getInputStream()和BufferedReader 和 InputStreamReader 用法
关于request.getInputStream(): http://www.cnblogs.com/steve-cnblogs/articles/5420198.html 浏览器 采用了一种编码方式 ...
- HttpURLConnection(http 1.1) 用法、状态码、状态描述
最近研究了java的HttpURLConnection的用法, 这里简单的做一下记录: Java中可以使用HttpURLConnection来请求WEB资源. 1. URL请求的类别 分为二类,GET ...
- [转]利用URLConnection来发送POST和GET请求
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
随机推荐
- uboot启动linux的过程
一.概述 linux内核镜像常见到的有两种形式,zImage和uImage.这两种文件的格式稍有差别,所以启动这两种格式的内核镜像也会有所不同.目前,uboot只支持启动uImage类型的镜像,对zI ...
- KVC 与 KVO 理解-b
KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解. Key-Value Coding (KVC) KVC,即是指 NSKeyValueCoding,一 ...
- SqlServer 允许保存对数据库中表结构的修改
1.Tools-->optisons-->Designers 如下截图
- uploadify 自定义按钮样式
uploadify是一款不错的JQUERY上传插件,但是FLASH按钮的外挂往往跟我们网页的设计不太搭配.一开始我还试图反编译uploadify.swf来修改其外观,结果发现反编译为FLA后里面没有任 ...
- jQuery的preventDefault()
1. 含义: preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交). 2. 语法: event.preventDefault() 3. 例子: 防止链 ...
- R统计软件真有意思哈,以后我怕要用得着,先自学
呵呵,作数据分析是数据监控后的动作. 思路是用监控系统产生数据, 如果监控本身提供统计最好,如果不提供,则可以用R来作分析统计和预测. 如果数据不符合规范,则用PYTHON进行处理转换. ~~~~~~ ...
- bzoj1306
非常好的一道搜索题首先没有别的好办法就只能搜,基于对称性我只要搜对角线上半部分即可然后有些惯用的剪枝啦什么的,具体见程序然后代码很短,然后TLE了(但好像也有人过了)然后就不知道怎么优化了,看到CLJ ...
- 使用 Gradle 实现 TFS 构建自动化
发布于 2014-07-16 作者 陈 忠岳 感谢微软开放技术有限公司(简称"微软开放技术")发布的构建模板,我们现在便可以在 Team Foundation Server(TFS ...
- 动态规划(树形DP):HDU 5834 Magic boy Bi Luo with his excited tree
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8UAAAJbCAIAAABCS6G8AAAgAElEQVR4nOy9fXQcxZ0uXH/hc8i5N+
- HDOJ/HDU 1062 Text Reverse(字符串翻转~)
Problem Description Ignatius likes to write words in reverse way. Given a single line of text which ...