1. 程式人生 > >04_報文通用的屬性和方法_迭代查詢頭資訊

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中的頭資訊被以字串的形式存到一個字元陣列中,只有在使用頭資訊的時候解析他們,把他們封轉到一個對應的物件當中。

哪裡如有不妥,敬請指正。