JAVA携带参数(带有请求参数,请求头参数)直接发送POST请求

package com.test;

import org.apache.http.HttpEntity;
import org.apache.http.client.entity.UrlEncodedFormEntity;
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.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        sendPost();
    }

    public static void sendPost(){
        String value="12222";

        //创建post请求对象
        HttpPost post = new HttpPost("http://localhost:8080/test");
        try {
            //创建参数集合
            List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
            //添加参数
            list.add(new BasicNameValuePair("key", value));
            list.add(new BasicNameValuePair("releaseDate","2020-07-14 09:55:20"));
            //把参数放入请求对象,,post发送的参数list,指定格式
            post.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
            //添加请求头参数
            post.addHeader("timestamp","1594695607545");
            CloseableHttpClient client = HttpClients.createDefault();
            //启动执行请求,并获得返回值
            CloseableHttpResponse response = client.execute(post);
            //得到返回的entity对象
            HttpEntity entity = response.getEntity();
            //把实体对象转换为string
            String result = EntityUtils.toString(entity, "UTF-8");
            //返回内容
            System.out.println(result);
        } catch (Exception e1) {
            e1.printStackTrace();

        }
    }
}

以下是封装了的请求方式:

/**
     *
     * 发送请求
     * @param url 发送的url
     * @param headerMap  请求头参数集合 key参数名 value为参数值
     * @param bodyMap   请求参数集合 key参数名 value为参数值
     */
    public static String sendPost(String url, Map<String,String> headerMap,Map<String,String> bodyMap){

        //创建post请求对象
        HttpPost post = new HttpPost(url);
        try {
            //创建参数集合
            List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
            //添加参数
            if (bodyMap!=null){
                for (String str:bodyMap.keySet()
                ) {
                    list.add(new BasicNameValuePair(str, bodyMap.get(str)));
                }
            }
            //把参数放入请求对象,,post发送的参数list,指定格式
            post.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));


            if (headerMap!=null){
                for (String str:headerMap.keySet()
                     ) {
                    post.addHeader(str,headerMap.get(str));
                }
            }

            CloseableHttpClient client = HttpClients.createDefault();
            //启动执行请求,并获得返回值
            CloseableHttpResponse response = client.execute(post);
            //得到返回的entity对象
            HttpEntity entity = response.getEntity();
            //把实体对象转换为string
            String result = EntityUtils.toString(entity, "UTF-8");
            //返回内容
            return result;
        } catch (Exception e1) {
            e1.printStackTrace();
            return "";

        }
    }

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用`RestTemplate`的`postForEntity`方法来发送HTTP POST请求,同时携带文件流和其他参数。具体可以参考下面的示例代码: ```java import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.Resource; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class RestClient { public static void main(String[] args) throws IOException { String url = "http://example.com/upload"; // 设置请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); // 设置请求体 MultiValueMap<String, Object> body = new LinkedMultiValueMap<>(); // 添加文件流 Path filePath = Paths.get("path/to/file.txt"); byte[] fileBytes = Files.readAllBytes(filePath); Resource fileResource = new ByteArrayResource(fileBytes) { @Override public String getFilename() { return filePath.getFileName().toString(); } }; body.add("file", fileResource); // 添加其他参数 body.add("param1", "value1"); body.add("param2", "value2"); HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class); System.out.println(response.getBody()); } } ``` 在上面的示例代码中,我们首先设置了请求头,指定了请求体的类型为`multipart/form-data`。然后构造了一个`MultiValueMap`对象,用于存储请求体的键值对。通过`ByteArrayResource`类可以将文件流转化为Spring的`Resource`对象,并将其添加到请求体中。最后,我们使用`postForEntity`方法发送HTTP POST请求,并将响应的内容解析为字符串。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值