对Java的HttpURLConnection的封装类

简介:
用于模拟浏览器访问网页,抓取站点源文件。
  HttpClient(现在是HttpComponents)把问题搞复杂了。其实 Java内置的HttpURLConnection很好的。HttpComponents不但复杂,而且有小问题。Java API没有内置HttpComponents是应该是有考虑的,HttpURLConnection已经可以了。
  * 基于HttpURLConnection
  * version 1.0.0_00,支持POST数据,支持SSL,支持上传文件。
  * GET、POST方式无需设置自动判断。
  * 代码经过优化和修理。
   【API简介】
  该class没有字段。
  该class的方法:
Http(String urlString, String charset);
execute();
setHeader(String name, String value);
setTimeOut(int ms);
addPostData(String name, String value);
addUploadFile(String name, String path, String rename);
getInputStream();
getHeader(String key);
getHeaders();
javadoc文档
   【示例】
  举一个几乎用到所有功能的例子
import http.Http;
import java.util.*;
import java.io.*;
public class NewClass {
public static void main(String[] args) throws Exception {
String charset = "gbk";
Http http1 = new Http("http://xxxxxxx/login.php", charset);
/**
* 登录
*/
http1.addPostData("username", "username中文");
http1.addPostData("password", "password中文");
http1.execute();
/**
* 另一个访问,cookie和session你都不用管了,会自动处理,会处理包括cookie的过期时间等等。这就像浏览器的两个标签页一样。
*/
Http http2 = new Http("http://xxxxxxx/xxxxxx.php", charset);
http2.addPostData("testfield", "testfieldvalue中文1");
http2.addPostData("mycheckbox[]", "testfieldvalue中文2");
http2.addPostData("mycheckbox[]", "testfieldvalue中文3");
http2.addUploadFile("fieldName", "F:\\NetBeansProjects\\Wrapper\\src\\upfile.txt"
, "rename.txt");
http2.execute();
/**
* 打印返回的结果出来
*/
//状况
System.out.println("-------response header-------");
Map<String, List<String>> headersMap = http2.getHeaders();
for (Map.Entry<String, List<String>> entry : headersMap.entrySet()) {
String string = entry.getKey();
List<String> list = entry.getValue();
System.out.println(string + ": " + list.get(0));
}
//内容
//压缩的
if (http2.getHeader("Content-Encoding") != null) {
System.out.println("-------response content 压缩的,格式为" + http2.getHeader("Content-Encoding"));
//使用http2.getInputStream()得到二进制流,做其它处理,解压缩、保存到文件等等。
return;
}
//非压缩的
System.out.println("-------response content-------");
InputStreamReader isr = new InputStreamReader(http2.getInputStream(), charset);
StringBuilder stringBuilder = new StringBuilder();
int len;
char[] cbuf = new char[1024];
while ((len = isr.read(cbuf)) >= 0) {
if (len == 1024) {
stringBuilder.append(cbuf);
} else {
stringBuilder.append(cbuf, 0, len);
}
}
System.out.println(stringBuilder.toString());
}
}
   附注:
  为什么没有直接返回页面文本而是通过getInputStream()方法返回一个输入流呢?
  原因一,有些网站会不定次地发送压缩格式的body,例如百度。本类不予解压缩,因为本类只负责抓取而不负责对文档进行解析,压缩类型(gzip等)不确定,返回的文档也不一定是什么文档。可根据getHeader("Content-Encoding")的值判断压缩情况。
  原因二,java中都是对流进行操作,这是个标准的、默认的接口。


最新内容请见作者的GitHub页:http://qaseven.github.io/

相关文章
|
2天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
|
20天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
41 17
|
11天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
15天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
55 4
|
16天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
34 2
|
24天前
|
安全 Java API
深入探索Java网络编程中的HttpURLConnection:从基础到进阶
本文介绍了Java网络编程中HttpURLConnection的高级特性,包括灵活使用不同HTTP方法、处理重定向、管理Cookie、优化安全性以及处理大文件上传和下载。通过解答五个常见问题,帮助开发者提升网络编程的效率和安全性。
|
21天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
25天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
25天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
24天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
29 3