HttpComponents也就是以前的httpclient项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端/服务器编程工具包,并且它支持 HTTP 协议最新的版本和建议。
以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。
- 实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
- 支持自动转向
- 支持 HTTPS 协议
- 支持代理服务器等
- 支持Cookie
/* * HTTP POST请求 */ public boolean HttpPost(String url, Map<String,String> post, Map<String,String> head){ boolean httpRES = true; /* * 发送请求 */ try { // 1. 设置 url 对象 this.httpUtil = new HttpPost(url); // 2. 加入 post参数 List <NameValuePair> params = new ArrayList <NameValuePair>(); for (Map.Entry<String, String> line : post.entrySet()) { params.add( new BasicNameValuePair( line.getKey(), line.getValue() ) ); } this.httpUtil.setEntity((HttpEntity) new UrlEncodedFormEntity(params, Consts.UTF_8)); // 3. 加入 head参数 for (Map.Entry<String, String> line : head.entrySet()) { this.httpUtil.setHeader( line.getKey(), line.getValue() ); } // 4. 发送请求 this.httpResponse = this.httpClient.execute(this.httpUtil); // 5. 获取状态 设置状态 this.http.setServerStatusCode(this.httpResponse.getStatusLine().getStatusCode()); if( 200 != this.http.getServerStatusCode() ){ //访问失败 返回失败信息 httpRES = false; } this.entity = this.httpResponse.getEntity(); // 6. 获取内容 设置内容 InputStream in = this.entity.getContent(); this.readResponse(in); // 7. 获取header 设置header Header[] headers = this.httpResponse.getAllHeaders(); for(Header h : headers){
System.out.println(h.getName() + " : " + h.getValue()); } // 从输入流读取网页字符串内容 // System.out.println(this.entity.getContentType()); // System.out.println(this.entity.getContentEncoding()); // System.out.println(this.entity.getContentLength()); // 8. 关闭 url 对象 EntityUtils.consume(this.entity); } catch (Exception e) { LogFile.Error("Exception: " + e.toString()); e.printStackTrace(); httpRES = false; return httpRES; } finally { // 9. 关闭 url 对象 this.httpClient.getConnectionManager().shutdown(); } return httpRES; } /* * 读取http返回内容 ,并打印 */ private void readResponse(InputStream in) throws Exception{ BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line = null; while ((line = reader.readLine()) != null) {
System.out.println(line); } }
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java的HTTP协议库 HttpComponents(爬虫) - Python技术站