04_報文通用的屬性和方法_迭代查詢頭資訊
阿新 • • 發佈:2019-02-16
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中的頭資訊被以字串的形式存到一個字元陣列中,只有在使用頭資訊的時候解析他們,把他們封轉到一個對應的物件當中。
哪裡如有不妥,敬請指正。