java 使用原生HttpURLConnection发送post请求

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import org.apache.log4j.Logger;

public class RequestDoPostUtil {
    private static Logger log = Logger.getLogger(RequestDoPostUtil.class);

    public static String doPost(String url, Map<String, Object> parameters) throws Exception {
        // 编码请求参数
        String params = paramsConvert(parameters);
        URL restURL = new URL(url);

        log.info("链接:"+url);
        log.info("参数:"+parameters.toString());

        int t= 0;//调用接口出错次数
        while(t<3) {
            try {
                /*
                 * 此处的urlConnection对象实际上是根据URL的请求协议(此处是http)生成的URLConnection类
                 * 的子类HttpURLConnection
                 */
                HttpURLConnection conn = (HttpURLConnection) restURL.openConnection();
//                conn.setConnectTimeout(5000);
//                conn.setReadTimeout(5000);
                // 请求方式
                conn.setRequestMethod("POST");
                // 设置是否从httpUrlConnection读入,默认情况下是true; httpUrlConnection.setDoInput(true);
                conn.setDoOutput(true);
                // allowUserInteraction 如果为 true,则在允许用户交互(例如弹出一个验证对话框)的上下文中对此 URL 进行检查。
                conn.setAllowUserInteraction(false);

                PrintStream ps = new PrintStream(conn.getOutputStream());
                ps.print(params);

                ps.close();

                BufferedReader bReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

                String line, resultStr = "";

                while (null != (line = bReader.readLine())) {
                    resultStr += line;
                }
                System.out.println(resultStr);
                bReader.close();

                return resultStr;
            } catch (Exception e) {
                t++;
                log.warn("=======>出错次数(requset error ):" + t);
                e.printStackTrace();
            }
        }

        throw new Exception("网络异常,请稍后再试");

    }

    /**
     * 参数类型转换
     *
     * @param parameters
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String paramsConvert(Map<String, Object> parameters) throws UnsupportedEncodingException {
        StringBuffer sb = new StringBuffer();// 处理请求参数
        // 编码请求参数
        for (String name : parameters.keySet()) {
            Object object = parameters.get(name);
            log.info("类型:"+object.getClass());
            if(object instanceof Integer) {
                sb.append(name).append("=").append(java.net.URLEncoder.encode((String)object, "UTF-8"))
                .append("&");
            }else if(object instanceof Date) {
                Calendar cal = Calendar.getInstance();
                cal.setTime((Date)object);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                sb.append(name).append("=").append(java.net.URLEncoder.encode(sdf.format(cal.getTime()), "UTF-8"))
                .append("&");
            }else{
                if(object.getClass().isArray()) {//判断是否是字符串数组
                    String[] values = (String[])object;
                    for(String va : values) {
                        sb.append(name).append("=").append(java.net.URLEncoder.encode((String) va, "UTF-8"))
                        .append("&");
                    }
                }else {
                    sb.append(name).append("=").append(java.net.URLEncoder.encode((String) parameters.get(name), "UTF-8"))
                    .append("&");
                }
            }
        }
        return sb.toString().substring(0, sb.toString().length()-1);
    }

    public static void main(String[] args) {
        int s = 0;
        Object o = (Object)s;
        log.info(o.getClass());
        Integer a = 0;
        log.info(a.getClass());
        Date b = new Date();
        log.info(b.getClass());
        String c = "";
        log.info(c.getClass());
        String [] d = new String[2];
        log.info(d.getClass());
    }
}

原文地址:https://www.cnblogs.com/lxk233/p/10476216.html

时间: 2024-10-07 18:24:33

java 使用原生HttpURLConnection发送post请求的相关文章

java中原生的发送http请求(无任何的jar包导入)

1 package com.teamsun.pay.wxpay.util; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintWriter; 7 import java.net.URL; 8 import java.net.URLConnection; 9 import java.util.List;

使用httpclient实现http链接池与使用HttpURLConnection发送http请求的方法与性能对比

使用httpclient实现http链接池与使用HttpURLConnection发送http请求的方法与性能对比 在项目中需要使用http调用接口,实现了两套发送http请求的方法,一个是使用apache的httpclient提供的http链接池来发送http请求,另一个是使用java原生的HttpURLConnection来发送http请求,并对两者性能进行了对比. 使用httpclient中的链接池发送http请求 使用最新的4.5.2版httpclient进行实现.在maven中引入 <

java 常见几种发送http请求案例

1 import java.io.FileOutputStream; 2 import java.io.IOException; 3 import java.io.InputStream; 4 import java.io.InputStreamReader; 5 import java.io.OutputStreamWriter; 6 import java.io.UnsupportedEncodingException; 7 import java.net.HttpURLConnection

使用原生JavaScript发送ajax请求

关于使用原生JavaScript发送异步请求给服务端. 准备工作: 代码编写工具用的是sublime 服务端使用的是wamp搭的一个本地Apache服务器,主要用来返回数据 方便测试 步骤: 浏览器端 html标签绑定事件发送ajax请求----> 五步操作:1 创建异步对象XMLHttpRequest; 2 设置method url 3 发送请求给服务端 4 注册事件   5 在事件中获取服务端返回的数据,进行操作. 服务器端 1 获取请求数据 2 返回结果给浏览器 下面来一个小demo1做一

HttpUrlConnection发送url请求(后台springmvc)

1.HttpURLConnection发送url请求 public class JavaRequest { private static final String BASE_URL = "http://localhost:8080/dsdemo/"; public static String userToken = null; public static String problemName = null; public static String sendPost(String su

【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法

Java原生的API可用于发送HTTP请求 即java.net.URL.java.net.URLConnection,JDK自带的类: 1.通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection) 2.设置请求的参数 3.发送请求 4.以输入流的形式获取返回内容 5.关闭输入流 封装请求类 1 package com.util; 2 3 import java.io.BufferedReader; 4 import java.io.IOExcept

JAVA使用原始HttpURLConnection发送POST数据

package com.newflypig.demo; /** * 使用jdk自带的HttpURLConnection向URL发送POST请求并输出响应结果 * 参数使用流传递,并且硬编码为字符串"name=XXX"的格式 */ import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnectio

使用原生ajax发送post请求完整案例

使用ajax发送数据实现前后台的交互,我想是web开发最基础的技能了.近来dz开发因为不兼容jquery,所以只能使用原生js发送数据,不想还遇到很多问题.在这里分析总结一下.先来一个使用ajax发送post表单数据的案例. <html> <head> <title> ajax发送post请求实例 </title> </head> <body> <form method="post" action="

【JAVA】通过HttpClient发送HTTP请求的方法

HttpClient介绍 HttpClient 不是一个浏览器.它是一个客户端的 HTTP 通信实现库.HttpClient的目标是发 送和接收HTTP 报文.HttpClient不会去缓存内容,执行 嵌入在 HTML 页面中的javascript 代码,猜测内容类型,重新格式化请求/重定向URI,或者其它和 HTTP 运输无关的功能. HttpClient使用 使用需要引入jar包,maven项目引入如下: 1 <dependency> 2 <groupId>org.apache