04_报文通用的属性和方法_迭代查询头信息

package com.scl.base;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.Header;
import org.apache.http.HeaderElement;
import org.apache.http.HeaderElementIterator;
import org.apache.http.HeaderIterator;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicHeaderElementIterator;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.message.HeaderGroup;

/**
 * http报文通用的属性和方法
 * Http报文可以包含一些描述报文属性的头部信息,不如内容长度,内容类型等。
 * 可以把这些报文信息获取出来,移除或者枚举http头信息。
 * @author 苏长利
 *
 */
public class HttpClientDemo04 {
	public static void main(String[] args) {
		//test1();
		//test2();
		test3();
	}
	public static void test1(){
		HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK, "OK");
		//增加头信息
		response.addHeader("Set-Cookie", "c1=a; path=/; domain=localhost");
		response.addHeader("Set-Cookie", "c2=b; path=\"/\", c3=c; domain=\"localhost\"");
		//getFirstHeader("Set-Cookie")方法返回指定消息头名称的第一个值,如果找不到返回null
		Header h1 = response.getFirstHeader("Set-Cookie");
		//打印第一个Set-Cookie
		System.out.println(h1);
		//getLastHeader("Set-Cookie")返回指定消息头名称的最后一个值,如果找不到返回null
		Header h2 = response.getLastHeader("Set-Cookie");
		System.out.println(h2);
		//返回指定名称的所有的值,返回不为null,内容可能为空
		Header[] headers = response.getHeaders("Set-Cookie"); 
		System.out.println("header长度:" + headers.length);
		//是这么实现的:首先是调用
		//1.HttpResponse继承的HttpMessage
		//2.headergroup是HttpMessage的一个属性,
		//3.headergroup封装了所有的头信息,用一个List集合存放头信息Header(Header是头信息的封装类,键值对格式)
		//4从headergroup中取得所有的和指定头名称相同的Header,然后存放到一个数组中返回
		//代码如下
		/* protected HeaderGroup headergroup;
		 * public Header[] getHeaders(final String name) {
        		return this.headergroup.getHeaders(name);
    	   }
		 * public Header[] getHeaders(String name) {
	        List<Header> headersFound = new ArrayList<Header>();

	        for (int i = 0; i < headers.size(); i++) {
	            Header header = headers.get(i);
	            if (header.getName().equalsIgnoreCase(name)) {
	                headersFound.add(header);
	            }
	        }

	        return headersFound.toArray(new Header[headersFound.size()]);
	    }*/
		
	}
	/**
	 * HeaderIterator迭代头信息
	 */
	public static void test2(){
		HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK, "OK");
		//增加头信息
		response.addHeader("Set-Cookie", "c1=a; path=/; domain=localhost");
		response.addHeader("Set-Cookie", "c2=b; path=\"/\", c3=c; domain=\"localhost\"");
		HeaderIterator it = response.headerIterator("Set-Cookie");
		while(it.hasNext()){
			System.out.println(it.next());
		}
		 
	}
	/**
	 * 解析头信息的独立的元素
	 */
	public static void test3(){
		HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK, "OK");
		//增加头信息
		response.addHeader("Set-Cookie", "c1=a; path=/; domain=localhost");
		response.addHeader("Set-Cookie", "c2=b; path=\"/\", c3=c; domain=\"localhost\"");
		
		HeaderElementIterator it = new BasicHeaderElementIterator(response.headerIterator("Set-Cookie"));
		while(it.hasNext()){
			HeaderElement e = it.nextElement();
			System.out.println(e.getName() + "=" + e.getValue());
			NameValuePair[] pramas = e.getParameters();
			for(int i = 0; i<pramas.length; i++){
				NameValuePair np = pramas[i];
				System.out.println(np.getName() + "=" + np.getValue());
			}
			System.out.println("---------------------------------");
		}
		 
	}
}

Http的头信息只有再需要的时候才会存到一个Header对象里面,Http中的头信息被以字符串的形式存到一个字符数组中,只有在使用头信息的时候解析他们,把他们封转到一个对应的对象当中。

哪里如有不妥,敬请指正。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值