java httpclient教程_HttpClient4.5.2 HTTP协议的请求和执行
一個HTTP方法的執行可以包含一個或多個HTTP請求/HTTP響應交換,通常由HttpClient的內部來處理。而期望用戶提供一個要執行的請求對象,而HttpClient期望傳輸請求到目標服務器并返回對應的響應對象,或者當執行不成功時拋出異常。
案例代碼:import?java.io.InputStream;
import?org.apache.http.HttpEntity;
import?org.apache.http.HttpResponse;
import?org.apache.http.client.HttpClient;
import?org.apache.http.client.methods.HttpGet;
import?org.apache.http.impl.client.DefaultHttpClient;
public?class?HttpClientDemo?{
/**
*?@param?args
*?@throws?Exception
*/
public?static?void?main(String[]?args)?throws?Exception?{
//?1、創建HttpClient客戶端類
HttpClient?httpclient?=?new?DefaultHttpClient();
//?2、創建GET請求類
HttpGet?httpget?=?new?HttpGet("http://www.baidu.com/");
//?3、執行GET請求
HttpResponse?response?=?httpclient.execute(httpget);
//?4、獲取執行返回結果
HttpEntity?entity?=?response.getEntity();
//?5、打印執行結果輸出內容
if?(entity?!=?null)?{
InputStream?instream?=?entity.getContent();
int?l;
byte[]?bytes?=?new?byte[2048];
while?((l?=?instream.read(bytes))?!=?-1)?{
String?html?=?new?String(bytes,0,l,"utf-8");
System.out.println(html);
}
}
}
}
所有HTTP請求有一個組合了的方法名,請求URI和HTTP協議版本的請求行。
HttpClient支持所有定義在HTTP/1.1版本中的HTTP方法:GET,HEAD,POST,PUT,DELETE,TRACE和OPTIONS。對于每個方法類型都有一個特殊的類:HttpGet,HttpHead,HttpPost,HttpPut,HttpDelete,HttpTrace和HttpOptions。
請求URI的使用:
請求的URI是統一資源定位符,它標識了應用于哪個請求之上的資源。HTTP請求URI包含一個協議模式,主機名稱,可選的端口,資源路徑,可選的查詢和可選的片段。
完成拼接URL:String?url?=?"http://www.baidu.com/s"?+
"?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu";
HttpGet?httpget?=?new?HttpGet(url);
System.out.println(httpget.getURI());
URIUtils類來拼裝:URI?uri?=?URIUtils.createURI("http",?"www.baidu.com",?-1,?"/s",
"ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu",?null);
HttpGet?httpget?=?new?HttpGet(uri);
System.out.println(httpget.getURI());
NameValuePair生成:List?qparams?=?new?ArrayList();
qparams.add(new?BasicNameValuePair("ie",?"utf-8"));
qparams.add(new?BasicNameValuePair("f",?"8"));
qparams.add(new?BasicNameValuePair("rsv_bp",?"0"));
qparams.add(new?BasicNameValuePair("rsv_idx",?"1"));
qparams.add(new?BasicNameValuePair("tn",?"baidu"));
URI?uri?=?URIUtils.createURI("http",?"www.baidu.com",?-1,?"/s",
URLEncodedUtils.format(qparams,?"UTF-8"),?null);
HttpGet?httpget?=?new?HttpGet(uri);
System.out.println(httpget.getURI());
輸出:
http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu
HTTP響應://?HTTP1.1響應
HttpResponse?response?=?new?BasicHttpResponse(HttpVersion.HTTP_1_1,
HttpStatus.SC_OK,?"OK");
//?版本號
System.out.println(response.getProtocolVersion());
//?狀態碼
System.out.println(response.getStatusLine().getStatusCode());
System.out.println(response.getStatusLine().getReasonPhrase());
System.out.println(response.getStatusLine().toString());
HTTP響應是由服務器在接收和解釋請求報文之后返回發送給客戶端的報文。響應報文的第一行包含了協議版本,之后是數字狀態碼和相關聯的文本段。
HTTP協議頭:
一個HTTP報文可以包含很多描述如內容長度,內容類型等信息屬性的頭部信息。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\"");
Header?h1?=?response.getFirstHeader("Set-Cookie");
System.out.println(h1);
Header?h2?=?response.getLastHeader("Set-Cookie");
System.out.println(h2);
Header[]?hs?=?response.getHeaders("Set-Cookie");
System.out.println(hs.length);
獲得給定類型的所有頭部信息最有效的方式是使用HeaderIterator接口。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());
}
解析HTTP報文到獨立頭部信息元素的方法方法。//?HttpResponse對象
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?elem?=?it.nextElement();
System.out.println(elem.getName()?+?"?=?"?+?elem.getValue());
NameValuePair[]?params?=?elem.getParameters();
for?(int?i?=?0;?i?
System.out.println("?"?+?params[i]);
}
}
總結
以上是生活随笔為你收集整理的java httpclient教程_HttpClient4.5.2 HTTP协议的请求和执行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 2 3 共存_python
- 下一篇: java list 存入整数,java