使用Java获取http响应头及请求资源

代码实例

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class URLTest {

	public static void main(String[] args) throws URISyntaxException {
		InputStream inputStream=null;
		try {
			//创建URL对象,例如:百度搜索中国好声音
			//wd关键词的值即为"中国好声音"的UTF-8编码,可以使用URLEncoder对字符进行编码
			String str="http://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD%E5%A5%BD%E5%A3%B0%E9%9F%B3"
					+ "&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg"
					+ "&rsv_enter=1&inputT=1498";

			URL url = new URL(str);

			//创建URLConnection对象
			URLConnection openConnection = url.openConnection();

			//编码类型
			String encoding=null;
			//下面打印响应头部分
			System.out.println("-----------响应头开始-----------");
			Map<String, List<String>> headerFields = openConnection.getHeaderFields();
			Set<Entry<String, List<String>>> entrySet = headerFields.entrySet();
			Iterator<Entry<String, List<String>>> iterator = entrySet.iterator();
			while(iterator.hasNext()) {
				Entry<String, List<String>> next = iterator.next();
				String key = next.getKey();
				List<String> value = next.getValue();
				String string = value.toString();
				System.out.println(key+":"+string);
				if("Content-Type".equals(key)) {
					int indexOf = string.indexOf("charset=");
					encoding = string.substring(indexOf+8,string.length()-1);
				}
			}
			System.out.println("-----------响应头结束-----------");

			//获取URLConnection对象的输入流
			inputStream=openConnection.getInputStream();

			//通过IO来读取流,写入文件
			int c;
			int count=0;
			File file=new File("baiduOSC.html");
			FileOutputStream fileOutputStream = new FileOutputStream(file);
			BufferedOutputStream outputStream = new BufferedOutputStream(fileOutputStream);
			inputStream=new BufferedInputStream(inputStream);
			Reader inputStreamReader = new InputStreamReader(inputStream,encoding);
			while((c=inputStreamReader.read())!=-1) {
					outputStream.write(c);
					count++;
			}
			inputStreamReader.close();
			outputStream.close();
			System.out.println("文件"+file.getName()+"的大小为"+Math.ceil(count/1024.0)+"kb");
			System.out.println("下载结束");

		} catch (IOException e) {
			System.err.println("无法下载");
		} finally {
			if(inputStream!=null) {
				try {
					inputStream.close();
				} catch(Exception ex) {
					//不处理
				}
			}
		}
	}
}

运行实例

-----------响应头开始-----------
BDPAGETYPE:[3]
Transfer-Encoding:[chunked]
null:[HTTP/1.1 200 OK]
Server:[BWS/1.1]
Cxy_ex:[1438852608+2445156729+d41d8cd98f00b204e9800998ecf8427e]
BDQID:[0xc8cf935400001d62]
Connection:[Keep-Alive]
P3P:[CP=" OTI DSP COR IVA OUR IND COM ", CP=" OTI DSP COR IVA OUR IND COM "]
Date:[Thu, 06 Aug 2015 09:16:48 GMT]
X-UA-Compatible:[IE=Edge,chrome=1]
Cache-Control:[private]
Cxy_all:[baiduhome_pg+66d9c0f29a9055c1f190fe638dacaa45]
Set-Cookie:[H_PS_PSSID=11193_16469_1438_12867_14668_16520_16513_16662_16424_16515_15459_12141_13932_16721; path=/; domain=.baidu.com, BDSVRTM=187; path=/, BD_CK_SAM=1;path=/, BDRCVFR[feWj1Vr5u3D]=mk3SLVN4HKm; path=/; domain=.baidu.com, PSTM=1438852608; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, BIDUPSID=5DAE500615A53E18FDB62639C686768B; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, BAIDUID=5DAE500615A53E18FDB62639C686768B:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com]
Vary:[Accept-Encoding]
BDUSERID:[0]
X-Powered-By:[HPHP]
Content-Type:[text/html;charset=utf-8]
-----------响应头结束-----------
文件baiduOSC.html的大小为491.0kb
下载结束
时间: 2024-11-05 18:29:07

使用Java获取http响应头及请求资源的相关文章

运用Java获取HTTP响应头

简介 HTTP响应头是网站服务器端针对客户的请求发出的一串信息,它可能包含了请求文档的内容类型,文档长度,对内容编码的字符集,日期时间,内容的过期时间,内容的最后修改时间,服务器型号,是否进行缓存等重要信息.了解这些信息对Java的网络编程具有重要的指导意义. HTTP通信机制 HTTP 使用内容类型,是指Web服务器向Web浏览器返回的文件都有与之相关的类型.所有这些类型在MIME Internet邮件协议上模型化,即Web服务 器告诉Web浏览器该文件所具有的种类,是HTML文档.GIF格式

前端怎么在响应头和请求头里面拿数据?

今天碰到一个比较困难的问题,对于前端小白来说一脸懵逼.问题就是怎么在响应头里面获取token,对于token想必大家都不陌生,但是到响应头里面获取token还是头一次.之前token都是后端返回给前端,听到这个需求之后,心中万马奔腾.接下来就是vue中的axios怎么从响应头里面拿token: axios.interceptors.response.use( response => { //axios拦截器 if (response.status === 200) { //响应成功后 if(re

HTTP响应头和请求头信息对照表

HTTP请求头提供了关于请求,响应或者其他的发送实体的信息.HTTP的头信息包括通用头.请求头.响应头和实体头四个部分.每个头域由一个域名,冒号(:)和域值三部分组成. 通用头标:即可用于请求,也可用于响应,是作为一个整体而不是特定资源与事务相关联. 请求头标:允许客户端传递关于自身的信息和希望的响应形式. 响应头标:服务器和于传递自身信息的响应. 实体头标:定义被传送资源的信息.即可用于请求,也可用于响应. 根据以上分类的HTTP请求头介绍可以参考此文,本工具根据请求和输出分为Request和

nginx 定义:响应头和请求头

1) 响应头 add_header 例如: add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; add_header X-Proxy-Cache $upstream_cache_status; 要小心Nginx的add_header指令详解: 当当前层级中没有add_header指令才会继承父级设置.所以我的疑问就清晰了:location中有add_header,nginx.conf中的配置被丢

java获取request的头信息

1.获取全部头信息: //get request headers private Map<String, String> getHeadersInfo() { Map<String, String> map = new HashMap<String, String>(); Enumeration headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String k

接口测试——HttpClient工具的https请求、代理设置、请求头设置、获取状态码和响应头

转自:https://www.cnblogs.com/hong-fithing/p/7617855.html https请求 https协议(Secure Hypertext Transfer Protocol) : 安全超文本传输协议, HTTPS以保密为目标研发, 简单讲HTTPS协议是由SSL+HTTP协议构建的可进行加密传输. 身份认证的网络协议, 其安全基础是SSL协议, 因此加密的详细内容请看SSL. 全称Hypertext Transfer Protocol overSecure

http请求头响应头及状态码列表

HTTP响应头和请求头信息对照表 HTTP请求头提供了关于请求,响应或者其他的发送实体的信息.HTTP的头信息包括通用头.请求头.响应头和实体头四个部分.每个头域由一个域名,冒号(:)和域值三部分组成. 通用头标:即可用于请求,也可用于响应,是作为一个整体而不是特定资源与事务相关联. 请求头标:允许客户端传递关于自身的信息和希望的响应形式. 响应头标:服务器和于传递自身信息的响应. 实体头标:定义被传送资源的信息.即可用于请求,也可用于响应. 根据以上分类的HTTP请求头介绍可以参考此文,本工具

[Java] 获取保存某一个网站的内容

以下代码可用于获取某一个链接的响应结果, 并将响应结果做简单的处理后, 存入文件中. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter;

java 发送http 的get|post 请求

<div> package wzh.Http; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.List; import java.util.Map; public