Java 发送http post 请求

Posted 陈扬天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 发送http post 请求相关的知识,希望对你有一定的参考价值。

package com.sm.utils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.apache.http.NameValuePair;
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;

public class HttpUtils {
    public static final String CHARSET = "UTF-8";
    // 发送get请求 url?a=x&b=xx形式
    public static String sendGet(String url, String param) {
        String result = "";
        BufferedReader in = null;
        try {
            String urlName = "";
            if (param.length() != 0) {
                urlName = url + "?" + param;
            } else
                urlName = url;
            URL resUrl = new URL(urlName);
            URLConnection urlConnec = resUrl.openConnection();
            urlConnec.setRequestProperty("accept", "*/*");
            urlConnec.setRequestProperty("connection", "Keep-Alive");
            urlConnec.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            urlConnec.connect();
            Map<String, List<String>> map = urlConnec.getHeaderFields();
            for (String key : map.keySet()) {
                System.out.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(urlConnec.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送get请求失败" + e);
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    // 发送post请求
    public static String sendPost(String url, MultipartHttpServletRequest param) {
        String result = "";
        PrintWriter out = null;
        BufferedReader in = null;
        try {
            URL resUrl = new URL(url);
            URLConnection urlConnec = resUrl.openConnection();
            urlConnec.setRequestProperty("accept", "*/*");
            urlConnec.setRequestProperty("connection", "Keep-Alive");
            urlConnec.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 发送POST请求必须设置如下两行
            urlConnec.setDoInput(true);
            urlConnec.setDoOutput(true);

            out = new PrintWriter(urlConnec.getOutputStream());
            out.print(param);// 发送post参数
            out.flush();
            // 定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(urlConnec.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("post请求发送失败" + e);
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
                if (out != null) {
                    out.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return result;
    }
    
    
    //post请求方法
    public static  String sendPost(String url, Map<String,Object> params) {
       String response = null;
       System.out.println(url);
       System.out.println(params);
       try {
           List<NameValuePair> pairs = null;
            if (params != null && !params.isEmpty()) {
                pairs = new ArrayList<NameValuePair>(params.size());
                for (String key : params.keySet()) {
                    pairs.add(new BasicNameValuePair(key, params.get(key).toString()));
            }
            }
           CloseableHttpClient httpclient = null;
           CloseableHttpResponse httpresponse = null;
           try {
               httpclient = HttpClients.createDefault();
               HttpPost httppost = new HttpPost(url);
              // StringEntity stringentity = new StringEntity(data);
               if (pairs != null && pairs.size() > 0) {
                   httppost.setEntity(new UrlEncodedFormEntity(pairs, CHARSET));
               }
               httpresponse = httpclient.execute(httppost);
               response = EntityUtils
                       .toString(httpresponse.getEntity());
               System.out.println(response);
           } finally {
               if (httpclient != null) {
                   httpclient.close();
               }
               if (httpresponse != null) {
                   httpresponse.close();
               }
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
       return response;
    }
    public static void main(String[] args) {
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("id","123456666");
        sendPost("http://192.168.1.56:8080/smkj/api/lcds/user/lcdsUser",map);
    }
    /**
     * 测试
     * 说明:这里用新浪股票接口做get测试,新浪股票接口不支持jsonp,至于post,因为本人用的公司的接口就不展示了,一样的,一个url,一个数据包
     */
    /*
     * public static void main(String[] args) { // TODO Auto-generated method
     * stub String resultGet = sendGet("http://hq.sinajs.cn/list=sh600389","");
     * System.out.println(resultGet); }
     */

}

 

以上是关于Java 发送http post 请求的主要内容,如果未能解决你的问题,请参考以下文章

java中如何判断发送的请求是不是得到响应

用java做一个httpClient 发送https 的get请求,需要证书验证的那种,求大神指点一下!

java客户端通过http发送POST请求上传文件

转:PHP中的使用curl发送请求(GET请求和POST请求)

java代码发送post请求,并接收xml文件。。。 发送请求时要带参数

Java模拟POST请求发送二进制数据