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中的头信息被以字符串的形式存到一个字符数组中,只有在使用头信息的时候解析他们,把他们封转到一个对应的对象当中。
哪里如有不妥,敬请指正。