java发送post请求以raw形式和 Params形式发送

java发送post请求以raw形式和 Params形式发送2.0(RestTemplate)

在对接第三方平台时遇到了好几个坑,,发送raw形式的请求时一直返回参数不存在搞得我欲不痛生,,,,
之后用postman测试了一下,发现用postman的raw形式的请求不行
java发送post请求以raw形式和 Params形式发送_第1张图片
换成postman的Params形式的请求就可以
java发送post请求以raw形式和 Params形式发送_第2张图片
所以提供了两种发送给大家参考

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
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.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
import java.util.Map.Entry;
 /**
     * header 在传输header时请务必加上charset=utf-8;
     *  "Content-Type: application/x-www-form-urlencoded;charset=utf-8\n"
     */
    public static final String HEADER =
                    "Accept-Encoding: gzip,deflate\n" +
                    "Content-Type: application/x-www-form-urlencoded;charset=utf-8\n" +
                    "Connection: Keep-Alive";

raw形式发送post请求

/**
 * @param url 访问地址
 *  @param param 需要传输参数参数;对象可以通过json转换成String
 * @param header header 参数;可以通过下面工具类将string类型转换成map
 * @return 返回网页返回的数据
 */
public static String sendPost(String url, String param, Map<String, String> header) throws UnsupportedEncodingException, IOException {
        OutputStreamWriter out;
        BufferedReader in = null;
        String result = "";
        URL realUrl = new URL(url);
        // 打开和URL之间的连接
        HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
        //设置超时时间
        conn.setConnectTimeout(5000);
        conn.setReadTimeout(15000);
        // 设置通用的请求属性
        if (header!=null) {
            for (Entry<String, String> entry : header.entrySet()) {
                conn.setRequestProperty(entry.getKey(), entry.getValue());
            }
        }
        conn.setRequestMethod("POST");
        conn.addRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("accept", "*/*");
        conn.setRequestProperty("connection", "Keep-Alive");
        conn.setRequestProperty("user-agent",
                "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
        // 发送POST请求必须设置如下两行
        conn.setDoOutput(true);
        conn.setDoInput(true);
        // 获取URLConnection对象对应的输出流
        out = new OutputStreamWriter( conn.getOutputStream(),"UTF-8");// utf-8编码
        // 发送请求参数
        out.write(param);

        // flush输出流的缓冲
        out.flush();
        // 定义BufferedReader输入流来读取URL的响应
        in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf8"));
        String line;
        while ((line = in.readLine()) != null) {
            result += line;
        }
        if(out!=null){
            out.close();
        }
        if(in!=null){
            in.close();
        }
        return result;
    }

Params形式发送post请求

/**
 * @param url 访问地址
 * @param headerMap  header 参数;可以通过下面工具类将string类型转换成map
 * @param contentMap 需要传输参数参数;对象可以通过json转换成map
 * @return 返回网页返回的数据
 */
public static String postMap(String url, Map<String, String> headerMap, Map<String, String> contentMap) {
    String result = null;
    CloseableHttpClient httpClient = HttpClients.createDefault();
    HttpPost post = new HttpPost(url);
    List<NameValuePair> content = new ArrayList<NameValuePair>();
    //将content生成entity
    Iterator iterator = contentMap.entrySet().iterator();
    while (iterator.hasNext()) {
        Entry<String, String> elem = (Entry<String, String>) iterator.next();
        content.add(new BasicNameValuePair(elem.getKey(), elem.getValue()));
    }
    CloseableHttpResponse response = null;
    try {
        //循环增加header
        Iterator headerIterator = headerMap.entrySet().iterator();
        while (headerIterator.hasNext()) {
            Entry<String, String> elem = (Entry<String, String>) headerIterator.next();
            post.addHeader(elem.getKey(), elem.getValue());
        }
        if (content.size() > 0) {
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity(content, "UTF-8");
            post.setEntity(entity);
        }
        //发送请求并接收返回数据
        response = httpClient.execute(post);
        if (response != null && response.getStatusLine().getStatusCode() == 200) {
            //获取response的body部分
            HttpEntity entity = response.getEntity();
            //读取reponse的body部分并转化成字符串
            result = EntityUtils.toString(entity);
        }
        return result;
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            httpClient.close();
            if (response != null) {
                response.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    return null;
}

Header字符串转map

 /**
     *Header字符串转map
     * @param zz
     * @return
     */
    public static Map<String, String> splid(String zz) {
        String[] stepOne = zz.split("\n");
        Map<String, String> map = new HashMap<String, String>();
        for (int i = 0; i < stepOne.length; i++) {
            String[] stepTwo = stepOne[i].split(": ");
            if (map.get(stepTwo[0]) == null) {
                map.put(stepTwo[0], stepTwo[1]);
            } else {
                map.put(stepTwo[0], stepTwo[1] + "," + map.get(stepTwo[0]));
            }
        }
        return map;
    }

你可能感兴趣的:(java,post,java,http)