apache的HttpComponents项目的介绍和简单使用

1、HttpComponents项目的介绍


先介绍一下一个开源项目, 这个项目就是Apache开源组织中的HttpComponents,主要是提供对http服务器的访问功能,目前已经是一个单独的项目,可见http服务器的访问绝非易事。



    在某些时候可能需要通过程序来访问这别人的网页程序,比如从别人的网页中“偷”一些数据。如果对方仅仅是一个很简单的页面,那我们的程序会很简单,。但是考虑到一些服务授权的问 题,很多公司提供的页面往往并不是可以通过一个简单的URL就可以访问的,而必须经过注册然后登录后方可使用提供服务的页面,这个时候就涉及到 COOKIE问题的处理。我们知道目前流行的动态网页技术例如ASP、JSP无不是通过COOKIE来处理会话信息的。为了使我们的程序能使用别人所提供的服务页面,就要求程序首先登录后再访问服务页面!再比如通过HTTP来上传文件呢?


    HttpComponents项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以让原来很头疼的事情现在轻松的解决,例如你不再管是HTTP或者HTTPS的通讯方式,告诉它你想使用HTTPS方式,剩下的事情交给 httpclient替你完成。

   网址:http://www.apache.org/   主页下面的Projects 可以找到HttpComponents项目,下载到相应的jar包,以及源代码跟示例程序。


2、httpcomponents 4.5.2 简单使用


HttpComponents 也就是以前的httpclient项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端/服务器编程工具包,并且它支持 HTTP 协议最新的版本和建议。不过现在的 HttpComponents 包含多个子项目,有:

HttpComponents Core
HttpComponents Client

HttpComponents AsyncClient

Commons HttpClient

以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。

实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
支持自动转向
支持 HTTPS 协议
支持代理服务器等
支持Cookie

之前用的HttpClient的方法都失效了,比如 httpclinet =new DefaultHttpClient(); 不知道为啥包里80%的类都失效了,总是觉得创建一个httpclient实例会比较麻烦,记不住。所以整理了一下新的方式简单使用。 
简单使用


导入jar包

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>

get请求获取响应

CloseableHttpClient httpClient= HttpClients.createDefault();
HttpGet httpget = new HttpGet("http://www.baidu.com");
CloseableHttpResponse response = httpClient.execute(httpget);
HttpEntity httpEntity= response.getEntity();
String strResult= EntityUtils.toString(httpEntity);
post请求获取响应

HttpPost httpost = new HttpPost("https://www.baidu.com");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("IDToken1", "username"));
nvps.add(new BasicNameValuePair("IDToken2", "password"));
httpost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8));

HttpClient提供URIBuilder工具类来简化URIs的创建和修改过程。

URI uri = new URIBuilder()  
        .setScheme("http")  
        .setHost("www.google.com")  
        .setPath("/search")  
        .setParameter("q", "httpclient")  
        .setParameter("btnG", "Google Search")  
        .setParameter("aq", "f")  
        .setParameter("oq", "")  
        .build();  
HttpGet httpget = new HttpGet(uri);  
System.out.println(httpget.getURI())
模拟浏览器请求
httpget.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0");

3、HttpComponents之httpclient基本使用方法 - httpclient的版本是4.3

 A、第一种方式

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
public class HttpClient2 {
 
    public static void main(String args[]) throws IOException {
        List<NameValuePair> formparams = new ArrayList<NameValuePair>();
        formparams.add(new BasicNameValuePair("account", ""));
        formparams.add(new BasicNameValuePair("password", ""));
        HttpEntity reqEntity = new UrlEncodedFormEntity(formparams, "utf-8");
 
        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(5000)
                .setConnectTimeout(5000)
                .setConnectionRequestTimeout(5000)
                .build();
 
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost("http://cnivi.com.cn/login");
        post.setEntity(reqEntity);
        post.setConfig(requestConfig);
        HttpResponse response = client.execute(post);
 
        if (response.getStatusLine().getStatusCode() == 200) {
            HttpEntity resEntity = response.getEntity();
            String message = EntityUtils.toString(resEntity, "utf-8");
            System.out.println(message);
        } else {
            System.out.println("请求失败");
        }
    }
}

B、第二种方式,这种方式是用了一个http的连接池,同时使用httpbuilder构造合适的http方法。
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
 
import java.io.IOException;
import java.util.*;
 
public class HttpClientUtils {
 
    private static PoolingHttpClientConnectionManager connectionManager = null;
    private static HttpClientBuilder httpBulder = null;
    private static RequestConfig requestConfig = null;
 
    private static int MAXCONNECTION = 10;
 
    private static int DEFAULTMAXCONNECTION = 5;
 
    private static String IP = "cnivi.com.cn";
    private static int PORT = 80;
 
    static {
        //设置http的状态参数
        requestConfig = RequestConfig.custom()
                .setSocketTimeout(5000)
                .setConnectTimeout(5000)
                .setConnectionRequestTimeout(5000)
                .build();
 
        HttpHost target = new HttpHost(IP, PORT);
        connectionManager = new PoolingHttpClientConnectionManager();
        connectionManager.setMaxTotal(MAXCONNECTION);
        connectionManager.setDefaultMaxPerRoute(DEFAULTMAXCONNECTION);
        connectionManager.setMaxPerRoute(new HttpRoute(target), 20);
        httpBulder = HttpClients.custom();
        httpBulder.setConnectionManager(connectionManager);
    }
 
    public static CloseableHttpClient getConnection() {
        CloseableHttpClient httpClient = httpBulder.build();
        httpClient = httpBulder.build();
        return httpClient;
    }
 
    public static HttpUriRequest getRequestMethod(Map<String, String> map, String url, String method) {
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        for (Map.Entry<String, String> e : entrySet) {
            String name = e.getKey();
            String value = e.getValue();
            NameValuePair pair = new BasicNameValuePair(name, value);
            params.add(pair);
        }
        HttpUriRequest reqMethod = null;
        if ("post".equals(method)) {
            reqMethod = RequestBuilder.post().setUri(url)
                    .addParameters(params.toArray(new BasicNameValuePair[params.size()]))
                    .setConfig(requestConfig).build();
        } else if ("get".equals(method)) {
            reqMethod = RequestBuilder.get().setUri(url)
                    .addParameters(params.toArray(new BasicNameValuePair[params.size()]))
                    .setConfig(requestConfig).build();
        }
        return reqMethod;
    }
 
    public static void main(String args[]) throws IOException {
        Map<String, String> map = new HashMap<String, String>();
        map.put("account", "");
        map.put("password", "");
 
        HttpClient client = getConnection();
        HttpUriRequest post = getRequestMethod(map, "http://cnivi.com.cn/login", "post");
        HttpResponse response = client.execute(post);
 
        if (response.getStatusLine().getStatusCode() == 200) {
            HttpEntity entity = response.getEntity();
            String message = EntityUtils.toString(entity, "utf-8");
            System.out.println(message);
        } else {
            System.out.println("请求失败");
        }
    }
}

=============END =============

以上内容为转载,只是把三个文章的内容整在了一起

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Apache HttpClientApache基金会开发的一个用于创建和发送HTTP请求的Java库。它可以通过Maven来管理和使用。在pom.xml文件中,可以添加如下依赖来使用HttpClient: ``` <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> ``` 其中,groupId是"org.apache.httpcomponents",artifactId是"httpclient",version是"4.5.13"(版本可能会有变化)。 ### 回答2: Apache HttpClient pom是指Apache HttpClient项目中的pom.xml文件。pom.xml是Apache Maven项目的核心文件,它定义了项目的基本信息、依赖关系以及构建的配置。 在Apache HttpClient pom中,我们可以看到一些重要的配置项。首先是项目的基本信息,如groupId、artifactId和version,它们用于唯一标识一个项目。这些信息在构建和部署过程中非常重要,它们定义了项目的身份和版本。 其次,Apache HttpClient pom中定义了项目的依赖关系。这些依赖项描述了项目所依赖的其他库或框架,以及它们的版本。这些依赖项是构建和运行Apache HttpClient所必需的,它们被自动下载并添加到项目的classpath中。 此外,Apache HttpClient pom还包含了构建和打包项目的配置。这些配置项描述了如何编译源代码、生成文档以及打包可执行文件。例如,它指定了编译器的版本、源代码目录和输出目录等。 对于开发人员来说,Apache HttpClient pom是非常重要的。它提供了一种统一的方式来管理项目的依赖项,并自动处理构建和部署过程中的许多细节。通过简单地编辑pom.xml文件,开发人员可以添加、移除或更新项目的依赖项,而无需手动下载和配置这些库。 总之,Apache HttpClient pom是Apache HttpClient项目中用于管理依赖关系和构建配置的核心文件。它定义了项目的基本信息、依赖关系以及构建的配置,为开发人员提供了方便的构建和部署方法。 ### 回答3: Apache HttpClient是一个开源的Java库,用于实现HTTP和HTTP/2客户端。它提供了各种功能,如发送HTTP请求、处理HTTP响应、处理cookie、进行连接管理和认证等。 pom是Apache Maven项目的配置文件,用于描述项目的依赖关系。在pom.xml文件中,我们可以指定Apache HttpClient作为项目的依赖。通过在pom.xml中添加以下代码,我们可以引入Apache HttpClient依赖: ``` <dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> </dependencies> ``` 这段代码的意思是,我们使用的是org.apache.httpcomponents组织下的httpclient库,版本号为4.5.13。当我们构建或运行项目时,Maven将自动下载并导入所需的Apache HttpClient库。 通过在pom.xml中添加Apache HttpClient的依赖,我们就可以在项目使用它提供的HTTP客户端功能。例如,我们可以创建一个HttpClient对象,发送GET或POST请求,获取服务器的响应等等。 总结来说,Apache HttpClient pom指的是在Apache Maven项目中,通过配置pom.xml文件来引入Apache HttpClient库的依赖。这样一来,我们就可以在项目使用Apache HttpClient来实现HTTP和HTTP/2的客户端功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值