java 融合 http 和 https 的post请求方法

package com.test;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
 
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import javax.net.ssl.X509TrustManager;

import com.alibaba.fastjson.JSONObject;
 
 

public class HttpsServer {
    
    /** * 默认请求超时时间20s */
    private static int DEFAUL_TIME_OUT = 20000;
    /** * 默认保持时间60s */
    private static int HTTP_KEEP_TIME = 60000;
    /** 默认编码 */
    private static String charSet = "GBK";
    private static SSLContext sslcontext = null;
    private static SSLSocketFactory socketFactory = null;
    private static TrustManager[] tm = {getServerTrustManager()};
    private static HostnameVerifier hv = new HostnameVerifier() {
        @Override
        public boolean verify(String urlHostName, SSLSession session) {
            return true;
        }

    };
    static{
        try {
            sslcontext = SSLContext.getInstance("SSL");
            sslcontext.init(null, tm, new SecureRandom());
            socketFactory = sslcontext.getSocketFactory();
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            System.out.println(e);
        } catch (KeyManagementException e) {
            // TODO Auto-generated catch block
            System.out.println(e);
        }
    }
     
    @SuppressWarnings("rawtypes")
    public static String  doPost(String URL,Map<String,String> parameters) throws UnsupportedEncodingException{
        String res="";
        DataOutputStream out = null;
        BufferedReader in = null;
        StringBuilder result = new StringBuilder();
        JSONObject jsonObject = new JSONObject();
        HttpURLConnection conn = null;
        InputStreamReader is = null;
        InputStream iss = null;
        StringBuffer params = new StringBuffer();
        for (Iterator iter = parameters.entrySet().iterator(); iter
                .hasNext();) {
            Entry element = (Entry) iter.next();
            params.append(element.getKey().toString());
            params.append("=");
            params.append(URLEncoder.encode(element.getValue().toString(),
                    charSet));
            params.append("&");
        }
        if (params.length() > 0) {
            params = params.deleteCharAt(params.length() - 1);
        }
        System.out.println("params:"+params);
        try {
         
            long start_tm = System.currentTimeMillis();
            URL url = new URL(URL);
            long end_tm = System.currentTimeMillis();
            conn = (HttpURLConnection) url.openConnection();
            if ("https".equalsIgnoreCase(url.getProtocol())){
                ((HttpsURLConnection)conn).setHostnameVerifier(hv);
                ((HttpsURLConnection)conn).setSSLSocketFactory(socketFactory);
                end_tm = System.currentTimeMillis();
            }
            conn.setRequestMethod("POST");
            // 发送POST请求必须设置为true
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 设置连接超时时间和读取超时时间
            conn.setConnectTimeout(DEFAUL_TIME_OUT);
            conn.setReadTimeout(HTTP_KEEP_TIME);
            end_tm = System.currentTimeMillis();
            // 获取输出流
            //out = new OutputStreamWriter(conn.getOutputStream());
            out = new DataOutputStream(conn.getOutputStream());

            long start_tm2 = System.currentTimeMillis();
            byte[] b = params.toString().getBytes();
            out.write(b);
            out.flush();
            out.close();
            end_tm = System.currentTimeMillis();
            System.out.println("传输数据时间:"+ (end_tm - start_tm2));
            // 取得输入流,并使用Reader读取
            start_tm2 = System.currentTimeMillis();
            jsonObject.put("status", conn.getResponseCode());
            end_tm = System.currentTimeMillis();
            System.out.println("总耗时:"+ (end_tm - start_tm));
            if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {
                iss = conn.getInputStream();
                is = new InputStreamReader(iss,charSet);
                in = new BufferedReader(is);
                String line;
                while ((line = in.readLine()) != null) {
                    result.append(line);
                }
            } else {
                System.out.println("ResponseCode is an error code:" + conn.getResponseCode());
                throw new RuntimeException("ResponseCode is an error code:" + conn.getResponseCode());
            }
            System.out.println("result:"+ result.toString());
            res=result.toString();

        } catch (Exception e) {
            System.out.println(e);
            throw new RuntimeException(e);
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    System.out.println(e);
                }
            }
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    System.out.println( e);
                }
            }
            if (iss != null) {
                try {
                    iss.close();
                } catch (IOException e) {
                    System.out.println( e);
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    System.out.println(e);
                }
            }

            if (conn != null){
                conn.disconnect();
            }
        }
        return res;
    }

    /**
     * 信任所有证书
     *
     * @param
     * @return
     */
    private static X509TrustManager getServerTrustManager() {
        X509TrustManager manager = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] arg0, String arg1)
                    throws CertificateException {
                // TODO Auto-generated method stub

            }

            @Override
            public void checkServerTrusted(X509Certificate[] arg0, String arg1)
                    throws CertificateException {
                // TODO Auto-generated method stub

            }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                // TODO Auto-generated method stub
                return null;
            }
        };
        return manager;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Java中,我们可以使用以下两种方法来发送POST请求: 1. 使用`HttpURLConnection`类 `HttpURLConnection`是Java标准库提供的一个类,用于发送HTTP请求。我们可以使用`HttpURLConnection`实现POST请求,示例代码如下: ```java import java.io.*; import java.net.*; public class PostExample { public static void main(String[] args) { try { String url = "http://example.com/api"; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // 设置请求方法POST con.setRequestMethod("POST"); // 设置请求头 con.setRequestProperty("Content-Type", "application/json"); String data = "{\"name\":\"John\", \"age\":30}"; // 开启输出流,并写入请求参数 con.setDoOutput(true); OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream()); out.write(data); out.close(); // 读取响应 BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); // 打印响应结果 System.out.println(response.toString()); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们首先创建了一个`HttpURLConnection`对象,并设置请求方法POST。然后设置请求头为`Content-Type: application/json`,表示请求参数的格式为JSON字符串。接下来,我们将请求参数写入`OutputStream`中,发送POST请求。最后,读取响应结果并打印出来。 2. 使用第三方库 除了使用`HttpURLConnection`类发送POST请求外,我们也可以使用一些第三方库来简化代码,例如`Apache HttpClient`和`OkHttp`。这些第三方库提供了更加简洁易用的API,可以大大减少编码量。以`OkHttp`为例,代码如下: ```java import okhttp3.*; public class PostExample { public static void main(String[] args) { try { String url = "http://example.com/api"; OkHttpClient client = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, "{\"name\":\"John\", \"age\":30}"); Request request = new Request.Builder() .url(url) .post(body) .addHeader("Content-Type", "application/json") .build(); Response response = client.newCall(request).execute(); // 打印响应结果 System.out.println(response.body().string()); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们使用`OkHttpClient`类创建了一个HTTP客户端,并使用`RequestBody`类创建了请求参数。然后,我们通过`Request.Builder`类构建请求对象,并设置请求方法POST。最后,我们发送POST请求并读取响应结果。 ### 回答2: Java中的post请求方法指的是使用HTTP协议中的post方法发送请求并接收响应的方法。 在Java中,我们可以使用多种方式来实现post请求方法。 一种常用的方式是使用Java的URLConnection类来发送post请求。该类可以通过openConnection()方法创建一个URLConnection对象,然后可以设置请求方法post,并设置请求的参数和请求头等信息,最后调用getInputStream()方法获取响应内容。 另一种方式是使用Apache HttpClient库来发送post请求。该库提供了更加简洁和易用的API来发送HTTP请求。我们可以通过创建一个HttpPost对象,设置请求的URL和请求参数等信息,然后通过HttpClient对象的execute()方法发送请求并获取响应。 除了上述两种方式外,还可以使用第三方的HTTP客户端库,如OkHttp等,来发送post请求。 在编写post请求方法时,通常需要注意以下几点: 1. 导入相关的包和类,如java.net包中的URLConnection类、org.apache.http包中的HttpPost类等; 2. 构建请求URL和请求参数等信息; 3. 设置请求方法post,并设置请求头信息; 4. 发送请求并获取响应; 5. 处理响应结果,如解析JSON、XML等格式的响应数据。 总之,Java中可以使用多种方式来实现post请求方法,根据具体的需求和使用场景选择合适的方式。 ### 回答3: Java中的POST请求方法是一种用于向服务器提交数据的HTTP请求方式。在Java中,可以使用多种方法来发送POST请求,其中最常见的方法是使用JavaHttpURLConnection类或Apache的HttpClient库。 使用HttpURLConnection类发送POST请求的步骤如下: 1. 创建一个URL对象,指定要发送POST请求的目标URL。 2. 调用URL对象的openConnection()方法,创建一个HttpURLConnection对象。 3. 设置请求方法POST,即conn.setRequestMethod("POST")。 4. 设置请求头部,如设置Content-Type、Accept等。 5. 创建一个输出流,将要发送的数据写入到输出流中。 6. 调用conn.getOutputStream()方法获取输出流,并将其连接到输出流。 7. 发送请求并获取服务器的响应。可以使用conn.getResponseCode()获取响应的状态码,使用conn.getInputStream()获取响应的输入流。 8. 读取服务器响应的数据,可以使用BufferedReader等类进行读取。 9. 关闭连接,释放资源。 使用Apache的HttpClient库发送POST请求的步骤如下: 1. 创建一个HttpClient对象。 2. 创建一个HttpPost对象,指定要发送POST请求的目标URL。 3. 创建一个List<NameValuePair>对象,用于存放请求的参数。 4. 向List对象中添加参数,如nameValuePairs.add(new BasicNameValuePair("param1", "value1"))。 5. 创建一个UrlEncodedFormEntity对象,将List对象编码为请求体的实体。 6. 将请求体的实体设置给HttpPost对象,即httpPost.setEntity(urlEncodedFormEntity)。 7. 执行POST请求,获取响应对象HttpResponse。 8. 读取响应对象的内容,可以使用EntityUtils等工具类进行读取。 9. 关闭连接,释放资源。 总的来说,以上就是Java中发送POST请求方法。根据不同的需求和场景,可以选择HttpURLConnection类或Apache的HttpClient库进行发送POST请求的实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值