java 获取http请求的报文体
时间: 2023-07-17 10:01:37 浏览: 101
### 回答1:
Java 获取 HTTP 请求的报文体可以通过 Servlet 中的 request 对象来实现。
在 Servlet 中,我们可以通过 HttpServletRequest 对象的 getInputStream() 和 getReader() 方法来获取 HTTP 请求的报文体。
getInputStream() 方法返回一个 ServletInputStream 对象,可以使用该对象的 read(byte[] b) 方法来读取报文体的内容,返回读取的字节数。下面是一个示例代码:
```
InputStream inputStream = request.getInputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
// 处理读取的字节数据
}
inputStream.close();
```
getReader() 方法返回一个 BufferedReader 对象,可以使用该对象的 readLine() 方法来按行读取报文体的内容,返回读取的字符串。下面是一个示例代码:
```
BufferedReader reader = request.getReader();
String line;
while ((line = reader.readLine()) != null) {
// 处理读取的字符串数据
}
reader.close();
```
需要注意的是,通过这两种方法获取的报文体内容是原始的字节或字符串数据,如果是 JSON 格式的报文体,可以使用 JSON 解析库来解析和操作。
以上就是使用 Java 获取 HTTP 请求的报文体的方法。希望对你有帮助!
### 回答2:
在Java中,可以通过使用HttpURLConnection或者HttpClient这两个类来获取HTTP请求的报文体。
使用HttpURLConnection类获取报文体的步骤如下:
1. 创建一个URL对象,通过传入要请求的URL地址。
2. 调用URL对象的openConnection方法,创建一个URLConnection对象。
3. 将URLConnection对象强制类型转换为HttpURLConnection对象,以便于调用HttpURLConnection特定的方法。
4. 调用HttpURLConnection对象的setRequestMethod方法,设置请求方法为GET或POST等。
5. 调用HttpURLConnection对象的getResponseCode方法,获取响应码,判断请求是否成功。
6. 若成功,可以通过调用HttpURLConnection对象的getInputStream方法获取输入流。
7. 调用输入流的相关方法,例如read方法,可以获取报文体的内容。
示例代码如下:
```
URL url = new URL("http://example.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
String responseBody = stringBuilder.toString();
System.out.println(responseBody);
reader.close();
inputStream.close();
}
```
使用HttpClient类获取报文体的步骤如下:
1. 创建一个CloseableHttpClient对象。
2. 创建一个HttpGet或HttpPost对象,传入要请求的URL地址。
3. 调用CloseableHttpClient对象的execute方法,执行请求,并获取CloseableHttpResponse对象。
4. 调用CloseableHttpResponse对象的getStatusLine方法,获取响应的状态行。
5. 判断状态行的状态码,若为200表示请求成功。
6. 若成功,可以通过调用CloseableHttpResponse对象的getEntity方法获取响应实体。
7. 调用响应实体的getContent方法,获取输入流。
8. 调用输入流的相关方法,例如read方法,可以获取报文体的内容。
示例代码如下:
```
CloseableHttpClient client = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("http://example.com");
CloseableHttpResponse response = client.execute(httpGet);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
String responseBody = stringBuilder.toString();
System.out.println(responseBody);
reader.close();
inputStream.close();
}
response.close();
client.close();
```
以上是两种常用的获取HTTP请求报文体的方法。根据具体的需求和使用场景,可以选择合适的方法来获取报文体。