org.apache.http.client.HttpClient

本文介绍了一种利用Apache HttpClient库发起POST请求的方法。通过实例展示了如何设置请求参数、执行请求及处理响应。此方法适用于Java应用程序中需要向服务器发送表单数据的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
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.protocol.HTTP;
import org.apache.http.util.EntityUtils;

public class HttpClientTests {
public static void main(String[] args) throws IOException{
HttpClient client=new DefaultHttpClient();
//POST url
String posturl="http://localhost:8080/a.action";
//建立HttpPost对象
HttpPost httpPost=new HttpPost(posturl);
//建立一个NameValuePair数组,用于存储欲传递的参数
List params=new ArrayList();
//添加参数
params.add(new BasicNameValuePair("start", "0"));
params.add(new BasicNameValuePair("size", "14"));
params.add(new BasicNameValuePair("sortType", "hot"));
//设置编码
httpPost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
//发送Post,并返回一个HttpResponse对象  
HttpResponse response=new DefaultHttpClient().execute(httpPost);
//可以得到指定的header
//      Header header = response.getFirstHeader("Content-Length");
// String Length=header.getValue(); 
// System.out.println(header.getName());
//如果状态码是200,则正常返回
if(response.getStatusLine().getStatusCode()==200){
//获得返回的字符串
String result=EntityUtils.toString(response.getEntity());
//打印输出
System.err.println(result);
//如果是下载的文件,可以用response.getEntity().getContent返回InputStream 
}
}
}
<think>好的,用户的问题是关于如何使用org.apache.http.client.HttpClient获取HTTP响应状态码的示例代码。首先,我需要回忆一下Apache HttpClient库的相关知识。记得HttpClient是用来发送HTTP请求的,而状态码是HTTP响应的一部分,通常在处理响应时需要获取。 用户提到了具体的类org.apache.http.client.HttpClient,这说明他们可能在使用较旧版本的HttpClient,比如4.x版本,而不是最新的5.x。因为新版本中的包名可能会有所不同,比如org.apache.hc.client5.http.classic.HttpClient。所以需要确认版本,但根据用户提供的引用,比如引用[3]中提到了response.getStatusLine().getStatusCode(),这可能对应的是4.x版本的用法。 接下来,我需要查找如何发送请求并获取响应状态码。通常的步骤是创建HttpClient实例,创建请求对象(比如HttpGet或HttpPost),执行请求得到HttpResponse对象,然后从HttpResponse中获取状态码。状态码可以通过response.getStatusLine().getStatusCode()来获取,这在引用[3]中也有提到。 用户需要示例代码,所以应该提供一个完整的Java代码示例,包括必要的导入、异常处理以及资源释放。需要注意的是,HttpClient的不同版本可能有不同的实现方式,比如CloseableHttpClient在4.x中是推荐的用法,而旧版可能使用DefaultHttpClient,但后者已经过时了。 此外,用户可能遇到的常见问题包括未处理异常、未正确关闭连接导致资源泄漏,或者状态码获取的方式不正确。比如在旧版本中使用getStatusLine().getStatusCode()是正确的,而在新版本中可能方法不同。因此,代码示例需要明确版本,并确保兼容性。 另外,用户提供的引用中有关于处理JSON数据、基本认证和Fluent API的内容,但当前问题集中在获取状态码,所以示例应保持简洁,只包含必要的步骤。同时,要提醒用户注意依赖的版本,比如在Maven中引入正确的HttpClient依赖。 最后,需要验证示例代码的正确性,确保能够编译运行,并且正确获取状态码。可能需要检查异常处理部分,比如IOException,以及正确关闭HttpResponse和HttpClient实例,避免资源泄漏。</think>以下是使用`org.apache.http.client.HttpClient`获取HTTP响应状态码的详细步骤及示例代码: --- ### 步骤说明 1. **创建HttpClient实例** 使用`HttpClientBuilder`生成可关闭的`CloseableHttpClient`对象[^1] 2. **构建HTTP请求** 如`HttpGet`或`HttpPost`,设置请求URL和参数 3. **执行请求并获取响应** 通过`execute`方法发送请求,返回`CloseableHttpResponse`对象 4. **提取状态码** 调用`response.getStatusLine().getStatusCode()`获取状态码[^3] 5. **关闭资源** 确保关闭`response`和`client`以防止资源泄漏 --- ### 完整代码示例 ```java import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import java.io.IOException; public class HttpClientExample { public static void main(String[] args) { // 1. 创建HttpClient实例 try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { // 2. 构建GET请求 HttpGet request = new HttpGet("https://httpbin.org/get"); // 3. 执行请求 try (CloseableHttpResponse response = httpClient.execute(request)) { // 4. 获取状态码 int statusCode = response.getStatusLine().getStatusCode(); System.out.println("HTTP状态码: " + statusCode); } } catch (IOException e) { e.printStackTrace(); } } } ``` --- ### 关键点说明 - **状态码类型**:返回值是`int`类型,如200(成功)、404(未找到)、500(服务器错误)等 - **异常处理**:必须捕获`IOException`,网络错误或协议错误时会抛出 - **资源释放**: 使用`try-with-resources`语法自动关闭资源(Java 7+支持),避免手动调用`close()`[^1] --- ### 常见问题 1. **返回415状态码** 检查请求头`Content-Type`是否与发送的数据格式匹配[^5] 2. **获取状态码为-1** 通常表示未成功建立连接,需检查网络或URL有效性 3. **连接池优化** 可通过`PoolingHttpClientConnectionManager`复用连接提升性能 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值