美文网首页
自动判断处理post和get请求示例

自动判断处理post和get请求示例

作者: 会飞的蜗牛66666 | 来源:发表于2019-03-05 17:16 被阅读0次

在项目中,我们需要对url进行解析处理,但是我们但是不知道url是post还是get请求,有时候呢,大量请求的时候有post也有get请求,但是我们又希望能稳定的得到书记,那么我们该怎么处理呢?

话不多说,先上示例代码:
package com.ky.common;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
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.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
import java.util.Map.Entry;

/**

  • @Author: xwj

  • @Date: 2019/3/5 0005 16:13

  • @Version 1.0
    */
    public class BaseFunction {

    /**

    • get请求
    • @param url url地址
    • @return string
      */
      private static String getRequest(String url) {
      CloseableHttpClient httpClient = null;
      CloseableHttpResponse response = null;
      String result = "";
      try {
      httpClient = HttpClients.createDefault();
      HttpGet httpGet = new HttpGet(url);
      httpGet.setHeader("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
      RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(60000)
      .setConnectionRequestTimeout(60000)
      .setSocketTimeout(80000)
      .build();
      httpGet.setConfig(requestConfig);
      response = httpClient.execute(httpGet);
      HttpEntity entity = response.getEntity();
      result = EntityUtils.toString(entity);
      } catch (IOException e) {
      e.printStackTrace();
      } finally {
      shutdown(response, httpClient);
      }
      return result;
      }

    /**

    • post请求
    • @param url url地址
    • @return string
      */
      private static String postRequest(String url) {
      Map<String, Object> paramMap = new HashMap<>();
      paramMap.put("Accept-Charset", "utf-8");
      paramMap.put("Content-Type", "application/x-www-form-urlencoded");
      paramMap.put("Content-Length", "");
      CloseableHttpClient httpClient = null;
      CloseableHttpResponse httpResponse = null;
      String result = "";
      httpClient = HttpClients.createDefault();
      HttpPost httpPost = new HttpPost(url);
      RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(60000)
      .setConnectionRequestTimeout(35000)
      .setSocketTimeout(60000)
      .build();
      httpPost.setConfig(requestConfig);
      httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
      if (paramMap.size() > 0) {
      List<NameValuePair> nvps = new ArrayList<>();
      Set<Entry<String, Object>> entrySet = paramMap.entrySet();
      for (Entry<String, Object> mapEntry : entrySet) {
      nvps.add(new BasicNameValuePair(mapEntry.getKey(), mapEntry.getValue().toString()));
      }
      // 为httpPost设置封装好的请求参数
      try {
      httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
      } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
      }
      }
      try {
      httpResponse = httpClient.execute(httpPost);
      HttpEntity entity = httpResponse.getEntity();
      result = EntityUtils.toString(entity);
      } catch (IOException e) {
      e.printStackTrace();
      } finally {
      shutdown(httpResponse, httpClient);
      }
      return result;
      }
/**
 * 释放连接
 *
 * @param response   响应
 * @param httpClient 客户端实例
 */
private static void shutdown(final CloseableHttpResponse response, final CloseableHttpClient httpClient) {
    Runtime.getRuntime().addShutdownHook(new Thread(() -> {
        if (response != null) {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (httpClient != null) {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }));
}

/**
 * 判断请求的方法是get还是post
 *
 * @param url
 * @return
 */
public static String parseUrl(String url) {
    HttpURLConnection httpURLConnection = null;
    String method = "";
    String post = "POST";
    String get = "GET";
    String data = "";
    try {
        URL localUrl = new URL(url);
        URLConnection connection = null;
        connection = localUrl.openConnection();
        httpURLConnection = (HttpURLConnection) connection;
        method = httpURLConnection.getRequestMethod();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (httpURLConnection != null) {
            httpURLConnection.disconnect();
        }
    }
    if (method.equalsIgnoreCase(post)) {
        data = postRequest(url);
    } else if (method.equalsIgnoreCase(get)) {
        data = getRequest(url);
    } else {
        try {
            throw new Exception(String.format("HTTP Request is not success, please sure the url:%s is correct", url));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return data;
}

}

我引入的包,只作单纯的请求,只要最后2个包就可以了:

<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.5</version>
    </dependency>

    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.4.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.4.1</version>
    </dependency>

相关文章

网友评论

      本文标题:自动判断处理post和get请求示例

      本文链接:https://www.haomeiwen.com/subject/pguouqtx.html