package com.wdm.utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class HttpClientUtils { private static Logger LOGGER = LoggerFactory.getLogger(HttpClientUtils.class); private static int CONNECT_TIME_OUT = 1000; private static int READ_TIME_OUT = 1000; private static byte[] BUFFER = new byte[1024]; public static final String DEFAULT_CHARSET = "UTF-8"; public static String get(String url) {
return get(url, null, DEFAULT_CHARSET);
} public static String get(String url, String charset) {
return get(url, null, charset);
} public static String get(String url, Map<String, String> header, String charset) {
return get(url, header, charset, CONNECT_TIME_OUT, READ_TIME_OUT);
} public static String get(String url, Map<String, String> header, String charset,
int connectTimeout, int readTimeout) {
String result = "";
try {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setUseCaches(false);
connection.setConnectTimeout(connectTimeout);
connection.setReadTimeout(readTimeout); if (header != null) {
for (Map.Entry<String, String> entry : header.entrySet()) {
connection.setRequestProperty(entry.getKey(), entry.getValue());
}
} ByteArrayOutputStream out = new ByteArrayOutputStream();
int responseCode = connection.getResponseCode();
if (responseCode < HttpURLConnection.HTTP_BAD_REQUEST) {
InputStream is = connection.getInputStream();
int readCount;
while ((readCount = is.read(BUFFER)) > 0) {
out.write(BUFFER, 0, readCount);
}
is.close();
} else {
LOGGER.warn("{} http response code is {}", url, responseCode);
}
connection.disconnect();
result = out.toString();
} catch (IOException e) {
LOGGER.error("{}", e.getMessage(), e);
}
return result;
} public static String post(String url, Map<String, String> params) {
return post(url, params, DEFAULT_CHARSET);
} public static String post(String url, Map<String, String> params, String charset) {
return post(url, params, null, charset);
} public static String post(String url, Map<String, String> params, Map<String, String> header, String charset) {
return post(url, params, header, charset, CONNECT_TIME_OUT, READ_TIME_OUT);
} public static String post(String url, Map<String, String> params, Map<String, String> header,
String charset, int connectTimeout, int readTimeout) {
String result = "";
try {
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setConnectTimeout(connectTimeout);
connection.setReadTimeout(readTimeout); if (header != null) {
for (Map.Entry<String, String> entry : header.entrySet()) {
connection.setRequestProperty(entry.getKey(), entry.getValue());
}
} StringBuilder builder = new StringBuilder();
if (params != null) {
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.append(entry.getKey());
builder.append("=");
builder.append(entry.getValue());
builder.append("&");
}
} OutputStream out = connection.getOutputStream();
out.write(builder.toString().getBytes(charset));
out.flush(); ByteArrayOutputStream bout = new ByteArrayOutputStream();
if (connection.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
InputStream is = connection.getInputStream();
int readCount;
while ((readCount = is.read(BUFFER)) > 0) {
bout.write(BUFFER, 0, readCount);
}
is.close();
}
connection.disconnect();
result = bout.toString();
} catch (IOException e) {
LOGGER.error("{}", e.getMessage(), e);
}
return result;
}
}

http请求数据封装的更多相关文章

  1. java框架之Struts2(2)-访问Servlet API及请求数据封装

    准备 为后面测试示例编写代码及配置如下: package com.zze.bean; import java.util.Date; public class User { private String ...

  2. Struts2 请求数据的自动封装 及 自定义转换器类

    请求数据自动封装: 实现原理:使用了参数拦截器.struts-default.xml中 <interceptor name="params" class="com. ...

  3. Struts2第四篇【请求数据自动封装、Action得到域对象】

    前言 前三篇的Struts博文基本把Struts的配置信息讲解完了-..本博文主要讲解Struts对数据的处理 一般地,我们使用Servlet的时候都是分为几个步骤的: 得到web层的数据.封装数据 ...

  4. Java Web请求和响应机制

    1.请求响应流程图 =================== 服务器处理请求的流程: 服务器每次收到请求时,都会为这个请求开辟一个新的线程. 服务器会把客户端的请求数据封装到request对象中,req ...

  5. body-parser Node.js(Express) HTTP请求体解析中间件

    body-parser Node.js(Express) HTTP请求体解析中间件 2016年06月08日     781     声明 在HTTP请求中,POST.PUT和PATCH三种请求方法中包 ...

  6. vue中Axios请求豆瓣API数据并展示到Swipe中

    vue中Axios请求豆瓣API数据并展示到Swipe中 1.首先是安装Axios: 安装方法cnpm install axios --save 等待npm安装完毕: 2.在main.js中引入axi ...

  7. JavaWeb请求-响应学习笔记

    先来看一个流程图: 服务器处理请求的流程: (1)服务器每次收到请求时,都会为这个请求开辟一个新的线程.   (2)服务器会把客户端的请求数据封装到request对象中,request就是请求数据的载 ...

  8. java请求POST发送json格式请求

    public static String upload(String url){ try { HttpClient httpclient = new DefaultHttpClient(); Http ...

  9. 深入 Struts2 的配置 - 处理多个请求-处理请求结果-模型驱动-异常机制

    转:http://www.java3z.com/cwbwebhome/article/article2/2938.html?id=1631 本部分主要介绍struts.xml的常用配置. 1.1.   ...

随机推荐

  1. Linux Guard Service - 守护进程再次分裂子进程

    当系统区内存不能再申请新进程的时候申请会失败 在512MB内存下最多分配的子进程数 3331 [root@localhost 05]# ./test5-1 50000 expect 50000 sub ...

  2. ClamAV资料链接

    1.http://wiki.ubuntu.org.cn/index.php?title=ClamAV&variant=zh-cn Ubuntu的wiki下对ClamAV的大致介绍,包括使用. ...

  3. clickonce联机模式

    发布时选择该程序只能联机使用,这样本地就不会进行安装. 参考地址:https://blog.csdn.net/dqs78833488/article/details/52513948

  4. C语言 一些算法

    1,斐波那契数列 ①递归 时间复杂度O(2^n)#include <stdio.h> int fib(int n){ ||n==) ; ) + fib(n-); } int main(){ ...

  5. 网站架构:PHP针对并发访问如何优化?

    1.拆表:大表拆小表(垂直拆,水平拆:分表,分区partition,分片sharding),可以在应用层实现,也可以在数据库层面实现一部分:提高系统性能. 2.分库:把表放到不同的数据库,这也是分布式 ...

  6. [Objective-C语言教程]多态(26)

    多态性这个词表示有许多形式. 通常,当存在类的层次结构并且通过继承相关时,会发生多态性. Objective-C多态表示对成员函数的调用将导致执行不同的函数,具体取决于调用该函数的对象的类型. 考虑下 ...

  7. JMeter组件之BeanShell PostProcessor的使用

    1. 场景一:获取请求响应中的数据,并保存 import com.alibaba.fastjson.*;  // 引入包.这个包需要先放在:<安装目录>\apache-jmeter-3.2 ...

  8. Flutter 1.0 正式版: Google 的便携 UI 工具包

    简评:所以 React-Native 和 Flutter 该怎么选? 在 10 个月前的 MWC 上,谷歌发布了 Flutter 的 Beta 版本,给跨平台应用开发带来了一种全新的选择,昨天谷歌正式 ...

  9. 10分钟教你用Python打造天气机器人+关键字自动回复+定时发送

    01 前言 Hello,各位小伙伴.自上次我们介绍了Python实现天气预报的功能以后,那个小程序还有诸多不完善的地方,今天,我们再次来完善一下我们的小程序.比如我们想给机器人发“天气”等关键字,它就 ...

  10. Python基础部分的疑惑解析——运算符和数据类型(3)

    补充上一篇: #! /user/bin/env python   代码内声明这一个就可以用1.py类似的文件直接执行,但是要在linux内加权限, 不需要在前面加python 1.py执行了.文件可以 ...