java中使用post请求,参数在body中的代码

一、请求方式:post,请求参数在body中,代码如下

    public static JSONObject SmsPost(String url, Map<String, Object> map) {
        try {
            //创建一个获取连接客户端的工具
            CloseableHttpClient httpClient = HttpClients.createDefault();
            //创建Post请求
            HttpPost httpPost = new HttpPost(url);
            //添加请求头
            httpPost.addHeader("Content-Type", "application/json;charset=utf-8");
            //封装请求参数,将map集合转换成json格式
            JSONObject jsonString = new JSONObject(map);
            //使用StringEntity转换成实体类型
            StringEntity entity = new StringEntity(jsonString.toString());
            System.out.println(jsonString.toJSONString());
//            entity.setContentEncoding("UTF-8");
//            entity.setContentType("application/json");//发送json数据需要设置contentType
            //将封装的参数添加到Post请求中
            httpPost.setEntity(entity);
            //执行请求
            CloseableHttpResponse response = httpClient.execute(httpPost);
            //获取响应的实体
            HttpEntity responseEntity = response.getEntity();
            //转化成字符串
            String entityString = EntityUtils.toString(responseEntity);
            //转换成JSON格式输出
            JSONObject result = JSONObject.parseObject(entityString);
//返回的是Utf-8格式,所以需要转换一下格式,不然乱码
            String httpResult = new String(result.get("msg").toString().getBytes("ISO-8859-1"), "utf-8");
            result.put("msg", httpResult);
            response.close();
            httpClient.close();
            return result;
        } catch (Exception e) {
            return null;
        }
    }

 

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 Java 解析 POST 请求代码如下: 1. 首先,使用 `java.net.Socket` 类创建一个 Socket 对象,连接到服务器。 2. 使用 `getInputStream()` 方法获取输入流,读取服务器发送的数据。 3. 使用 `BufferedReader` 对象读取服务器发送的数据,按行读取。 4. 读取 POST 请求头,获取请求参数的长度。 5. 使用 `read()` 方法读取请求参数的内容。 6. 关闭输入流和 Socket 对象。 下面是一个示例代码: ``` Socket socket = new Socket("example.com", 80); InputStream inputStream = socket.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { if (line.startsWith("Content-Length: ")) { int contentLength = Integer.parseInt(line.substring("Content-Length: ".length())); char[] buffer = new char[contentLength]; reader.read(buffer, 0, contentLength); String requestBody = new String(buffer); // Do something with the request body... } } reader.close(); inputStream.close(); socket.close(); ``` 这段代码演示了如何连接到服务器、读取数据、解析 POST 请求头和请求参数,以及关闭输入流和 Socket 对象。 希望这些信息对您有帮助! ### 回答2: 在Socket解析POST请求代码如下所示: 首先,我们需要获取客户端发送的POST请求信息。在Socket通信请求信息通常在请求传递。因此,我们需要先读取Socket的输入流,获取请求信息。 ``` InputStream inputStream = socket.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; StringBuilder requestBuilder = new StringBuilder(); while ((line = reader.readLine()) != null) { requestBuilder.append(line + "\n"); } String request = requestBuilder.toString(); ``` 接下来,我们需要从请求信息解析出POST请求参数POST请求参数通常是通过消息体以Key-Value的形式传递的。我们可以通过解析请求的Content-Length字段获取消息体的长度,并根据长度读取对应数量的字节流,并将其转换为字符串,从而获取消息体的内容。 ``` String messageBody = request.substring(request.lastIndexOf("\n") + 1); String[] params = messageBody.split("&"); Map<String, String> paramMap = new HashMap<>(); for (String param : params) { String[] keyValue = param.split("="); String key = URLDecoder.decode(keyValue[0], "UTF-8"); String value = URLDecoder.decode(keyValue[1], "UTF-8"); paramMap.put(key, value); } ``` 以上代码将解析POST请求参数,并将其以Key-Value的形式存储在Map。 最后,我们可以根据需要对参数进行进一步处理或响应。例如,可以根据参数执行相应的业务逻辑,然后将处理结果返回给客户端。 以上就是在Socket解析POST请求代码示例。通过读取输入流,解析请求信息,提取参数,并对参数进行处理,我们可以实现对POST请求的解析和处理。 ### 回答3: Java解析POST请求代码可以通过使用Socket连接来实现。以下是一个简单的示例代码: ```java import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; public class PostRequestParser { public static void main(String[] args) { try { // 创建Socket连接 Socket socket = new Socket("localhost", 8080); // 构建POST请求 String request = "POST /api/endpoint HTTP/1.1\r\n" + "Host: localhost:8080\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" + "Content-Length: 16\r\n\r\n" + "username=admin&password=123456"; // 获取输出流并发送请求 OutputStream outputStream = socket.getOutputStream(); outputStream.write(request.getBytes()); outputStream.flush(); // 获取输入流并读取响应 InputStream inputStream = socket.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; StringBuilder response = new StringBuilder(); while ((line = reader.readLine()) != null) { response.append(line); } // 解析响应 System.out.println(response.toString()); // 关闭连接 socket.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码通过创建一个Socket连接到指定的主机和端口,然后构建一个POST请求,发送请求并接收响应。请求包含了请求头和请求体,请求体是以URL编码的形式发送的。通过输入流获取响应,然后可以对响应进行解析和处理。最后关闭连接。 注意:该示例代码仅做演示用途,并没有进行异常处理、完整的报文解析以及相关业务处理等。实际应用需要根据具体需求进行改进和完善。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值