org.apache.commons.httpclient工具类


import
org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.URIException; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.StringRequestEntity; import org.apache.commons.httpclient.params.HttpConnectionManagerParams; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.commons.httpclient.util.URIUtil; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StreamUtils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.Map; public class HttpUtils { private static final Logger logger = LoggerFactory.getLogger(HttpUtil.class); /** * 执行一个HTTP GET请求,返回请求响应的HTML * * @param url 请求的URL地址 * @return 返回请求响应的HTML */ public static int doGet(String url) { HttpClient client = new HttpClient(); HttpMethod method = new GetMethod(url); try { client.executeMethod(method); } catch (URIException e) { logger.error("执行HTTP Get请求时,发生异常!", e); return HttpStatus.SC_BAD_REQUEST; } catch (IOException e) { logger.error("执行HTTP Get请求" + url + "时,发生异常!", e); return HttpStatus.SC_BAD_REQUEST; } finally { method.releaseConnection(); } logger.info("执行HTTP GET请求,返回码: {}", method.getStatusCode()); return method.getStatusCode(); } /** * 执行一个带参数的HTTP GET请求,返回请求响应的JSON字符串 * * @param url 请求的URL地址 * @return 返回请求响应的JSON字符串 */ public static String doGet(String url, String param) { // 构造HttpClient的实例 HttpClient client = new HttpClient(); //设置参数 // 创建GET方法的实例 GetMethod method = new GetMethod(url + "?" + param); // 使用系统提供的默认的恢复策略 method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); try { // 执行getMethod client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { return StreamUtils.copyToString(method.getResponseBodyAsStream(), Charset.forName("utf-8")); } } catch (IOException e) { logger.error("执行HTTP Get请求" + url + "时,发生异常!", e); } finally { method.releaseConnection(); } return null; } /** * 执行一个HTTP GET请求,返回请求响应的HTML * * @param url 请求的URL地址 * @param queryString 请求的查询参数,可以为null * @param charset 字符集 * @param pretty 是否美化 * @return 返回请求响应的HTML */ public static String doGet(String url, String queryString, String charset, boolean pretty) { //logger.info("http的请求地址为:"+url); logger.info("http的请求参数为:" + queryString); StringBuffer response = new StringBuffer(); HttpClient client = new HttpClient(); HttpMethod method = new GetMethod(url); try { if (StringUtils.isNotBlank(queryString)) { method.setQueryString(URIUtil.encodeQuery(queryString)); } HttpConnectionManagerParams managerParams = client.getHttpConnectionManager().getParams(); // 设置连接的超时时间 managerParams.setConnectionTimeout(3 * 60 * 1000); // 设置读取数据的超时时间 managerParams.setSoTimeout(5 * 60 * 1000); client.executeMethod(method); logger.info("http的请求地址为:" + url + ",返回的状态码为" + method.getStatusCode()); BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), charset)); String line; while ((line = reader.readLine()) != null) { if (pretty) { response.append(line).append(System.getProperty("line.separator")); } else { response.append(line); } } reader.close(); } catch (Exception e) { logger.error("执行HTTP Get请求" + url + "时,发生异常!" + e); return response.toString(); } finally { method.releaseConnection(); } return response.toString(); } /** * 执行一个带参数的HTTP POST请求,返回请求响应的JSON字符串 * * @param url 请求的URL地址 * @param map 请求的map参数 * @return 返回请求响应的JSON字符串 */ public static String doPost(String url, Map<String, Object> map) { // 构造HttpClient的实例 HttpClient httpClient = new HttpClient(); // 创建POST方法的实例 PostMethod method = new PostMethod(url); // 这个basicNameValue**放在List中 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); // 创建basicNameValue***对象参数 if (map != null) { for (Map.Entry<String, Object> entry : map.entrySet()) { nameValuePairs.add(new NameValuePair(entry.getKey(), entry.getValue().toString())); } } // 填入各个表单域的值 NameValuePair[] param = nameValuePairs.toArray(new NameValuePair[nameValuePairs.size()]); method.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); // 将表单的值放入postMethod中 method.addParameters(param); try { // 执行postMethod int statusCode = httpClient.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { return StreamUtils.copyToString(method.getResponseBodyAsStream(), Charset.forName("utf-8")); } } catch (UnsupportedEncodingException e1) { logger.error(e1.getMessage()); } catch (IOException e) { logger.error("执行HTTP Post请求" + url + "时,发生异常!" + e.toString()); } finally { method.releaseConnection(); } return null; } /** * 执行一个HTTP POST请求,返回请求响应的HTML * * @param url 请求的URL地址 * @param reqStr 请求的查询参数,可以为null * @param charset 字符集 * @return 返回请求响应的HTML */ public static String doPost(String url, String reqStr, String contentType, String charset) { HttpClient client = new HttpClient(); PostMethod method = new PostMethod(url); try { HttpConnectionManagerParams managerParams = client .getHttpConnectionManager().getParams(); managerParams.setConnectionTimeout(30000); // 设置连接超时时间(单位毫秒) managerParams.setSoTimeout(30000); // 设置读数据超时时间(单位毫秒) method.setRequestEntity(new StringRequestEntity(reqStr, contentType, "utf-8")); client.executeMethod(method); logger.info("返回的状态码为" + method.getStatusCode()); if (method.getStatusCode() == HttpStatus.SC_OK) { return StreamUtils.copyToString(method.getResponseBodyAsStream(), Charset.forName(charset)); } } catch (UnsupportedEncodingException e1) { logger.error(e1.getMessage()); return ""; } catch (IOException e) { logger.error("执行HTTP Post请求" + url + "时,发生异常!" + e.toString()); return ""; } finally { method.releaseConnection(); } return null; } /** * @param url * @param entity * @return * @throws IOException */ public static String doPost(String url, HttpEntity entity) { //创建httpclient对象 CloseableHttpClient client = HttpClients.createSystem(); //创建post方式请求对象 HttpPost httpPost = new HttpPost(url); //设置参数到请求对象中 httpPost.setEntity(entity); BufferedReader reader = null; try { CloseableHttpResponse response = client.execute(httpPost); logger.info("Status:" + response.getStatusLine().getStatusCode()); if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); String inputLine; StringBuffer buffer = new StringBuffer(); while ((inputLine = reader.readLine()) != null) { buffer.append(inputLine); } reader.close(); return buffer.toString(); } } catch (IOException ex) { logger.info("执行http post请求出错,exception={}", ex.getMessage()); } finally { try { client.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } }

注:

如果PostMethod提交的是中文字符,需要加上相应的编码格式: post.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8"); 
如果GetMethod提交的参数有中文字符,需要先转换成utf-8格式:String param = "enterpriseName="+ URLEncoder.encode("中国移动", "utf-8"); HttpUtil.doGet(param, url);


maven依赖说明
commons-httpclient 是 apache-commons 项目下的一个子项目,后来被 HttpComponents 取代,后者提供了更好的性能和更大的灵活性。

commons-httpclient的GAV地址为
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
其最新版本为3.1,且已经不再更新;


HttpComponents的GAV地址为
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>

转载于:https://www.cnblogs.com/wsy0202/p/11351906.html

<think>首先,用户的问题是:“我想查找关于 org.apache.commons.httpclient 依赖的使用或配置方法 请问如何在项目中添加 org.apache.commons.httpclient 依赖”。所以,我需要专注于如何添加这个依赖。 从系统级指令中,我有几个关键点: - 所有行内数学表达式必须使用$...$格式。 - 独立公式使用$$...$$格式。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 用户提供了三个引用: - 引用[1]: 描述了HttpClient的基本信息和用途。 - 引用[2]: 给出了Maven依赖的配置。 - 引用[3]: 展示了如何使用HttpClient进行请求。 用户的问题是关于添加依赖的,所以我应该重点引用[2],因为它直接提供了Maven依赖的代码。 现在,构建我的回答: 1. **结构清晰**:逐步解释如何添加依赖。 2. **使用中文**:整个回答用中文。 3. **引用标识**:在引用内容末尾添加[^1], [^2], [^3]。 4. **生成相关问题**:在回答后添加相关问题部分。 回答步骤: - **介绍**:简要解释org.apache.commons.httpclient是什么。 - **添加依赖**:详细说明如何在项目中添加依赖,特别是使用Maven,因为引用[2]提供了Maven依赖代码。 - **配置方法**:简要提及配置,因为用户也提到了配置方法,引用[3]有配置示例。 - **总结**:确保回答可靠。 生成相关问题: - 基于主题,如使用示例、常见问题、替代方案等。 最后,确保LaTeX语法正确,但在这个主题中,可能没有数学表达式,所以不需要添加额外的LaTeX。 完整回答结构: 1. 开头:解释HttpClient和依赖。 2. 主体:添加依赖的步骤,包括代码块。 3. 配置部分:简要说明配置。 4. 结尾:总结。 5. 相关问题部分。 相关问题示例: 1. 如何使用HttpClient发送HTTP请求? 2. HttpClient的常见配置有哪些? 3. 有没有替代HttpClient的库?</think>### 如何在项目中添加 org.apache.commons.httpclient 依赖 org.apache.commons.httpclient 是一个用于处理 HTTP 协议的 Java 客户端库,它提供了高效的网络资源访问功能,支持连接超时设置、请求管理等。下面我将逐步指导您如何在项目中添加此依赖,确保过程清晰可靠。添加依赖主要通过构建工具(如 Maven)实现,以下是详细步骤: #### 步骤 1: 确认项目构建工具 - 如果您的项目使用 **Maven**(Java 常见的依赖管理工具),可以直接在 `pom.xml` 文件中添加依赖。 - 对于其他工具(如 Gradle),需相应调整语法,但核心依赖坐标相同。 #### 步骤 2: 添加 Maven 依赖 - 打开项目的 `pom.xml` 文件。 - 在 `<dependencies>` 标签内添加以下代码块: ```xml <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> <!-- 推荐使用稳定版本 3.1 --> </dependency> ``` 此配置会从 Maven 中央仓库自动下载库文件。版本 `3.1` 是广泛兼容的稳定版本,但您可以根据需求选择其他版本(如最新补丁版)[^2]。 #### 步骤 3: 同步项目并验证 - **同步工具**:在 IDE(如 IntelliJ IDEA 或 Eclipse)中,右键点击项目并选择 "Maven > Update Project" 或运行命令 `mvn clean install`。 - **验证依赖**:检查项目构建路径是否包含 `commons-httpclient-3.1.jar`。若成功,您可以在代码中导入类,例如: ```java import org.apache.commons.httpclient.HttpClient; ``` #### 可选配置方法 - 添加依赖后,您可能需要配置 HttpClient 实例,例如设置超时时间: ```java HttpClient httpclient = new HttpClient(); httpclient.getHttpConnectionManager().getParams().setConnectionTimeout(5000); // 设置连接超时(单位:毫秒) httpclient.getHttpConnectionManager().getParams().setSoTimeout(10000); // 设置读取超时[^3] ``` 这能提升网络请求的健壮性,避免长时间阻塞。 #### 注意事项 - **兼容性**:HttpClient 3.x 已较旧(最新是 HttpClient 4.x),但如果您维护旧项目,3.1 版仍是可靠选择。对于新项目,建议评估升级到 HttpClient 4.x 或替代库如 OkHttp。 - **问题排查**:如果依赖下载失败,检查网络或 Maven 仓库设置。确保 `<repositories>` 标签包含中央仓库(默认已配置)。 - **参考文档**:更多使用细节可查阅 [Apache HttpClient 官方文档](https://hc.apache.org/httpclient-3.x/)。 通过以上步骤,您已成功添加依赖。HttpClient 简化了 HTTP 请求处理,适用于爬虫、API 调用等场景[^1]。 ### 相关问题 1. 如何使用 org.apache.commons.httpclient 发送 GET 或 POST 请求? 2. HttpClient 3.x 与 4.x 版本的主要区别是什么? 3. 在项目中配置 HttpClient 时,如何处理 SSL/TLS 安全连接? 4. 有没有轻量级的替代库可以替代 org.apache.commons.httpclient?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值