001/**
002 * Copyright (c) 2015-2022, Michael Yang 杨福海 (fuhai999@gmail.com).
003 * <p>
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 * <p>
008 * http://www.apache.org/licenses/LICENSE-2.0
009 * <p>
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package io.jboot.utils;
017
018import io.jboot.components.http.JbootHttpManager;
019import io.jboot.components.http.JbootHttpRequest;
020import io.jboot.components.http.JbootHttpResponse;
021
022import java.io.File;
023import java.util.HashMap;
024import java.util.Map;
025
026/**
027 * 功能更强大的http工具类
028 * 1、支持 http get post 操作
029 * 2、支持文件下载 和 文件上传
030 * 3、支持自定义https文件证书(可以用在类似调用支付相关接口等)
031 */
032public class HttpUtil {
033
034    /**
035     * http get操作
036     *
037     * @param url
038     * @return
039     */
040    public static String httpGet(String url) {
041        return httpGet(url, null);
042    }
043
044    /**
045     * http get操作
046     *
047     * @param url
048     * @param paras
049     * @return
050     */
051    public static String httpGet(String url, Map<String, Object> paras) {
052        return httpGet(url, paras, null);
053    }
054
055
056    /**
057     * 发送可以配置headers 的 http请求
058     *
059     * @param url
060     * @param paras
061     * @param headers
062     * @return
063     */
064    public static String httpGet(String url, Map<String, Object> paras, Map<String, String> headers) {
065        JbootHttpRequest request = JbootHttpRequest.create(url, paras, JbootHttpRequest.METHOD_GET);
066        request.addHeaders(headers);
067        JbootHttpResponse response = handle(request);
068        return response.isError() ? null : response.getContent();
069    }
070
071    /**
072     * http post 操作
073     *
074     * @param url
075     * @return
076     */
077    public static String httpPost(String url) {
078        return httpPost(url, null, null, null);
079    }
080
081    /**
082     * http post 操作
083     *
084     * @param url
085     * @return
086     */
087    public static String httpPost(String url, String postData) {
088        return httpPost(url, null, null, postData);
089    }
090
091
092    /**
093     * Http post 操作
094     *
095     * @param url
096     * @param paras post的参数,可以是文件
097     * @return
098     */
099    public static String httpPost(String url, Map<String, Object> paras) {
100        return httpPost(url, paras, null, null);
101    }
102
103    /**
104     * Http post 操作
105     *
106     * @param url
107     * @param paras
108     * @param postData
109     * @return
110     */
111    public static String httpPost(String url, Map<String, Object> paras, String postData) {
112        return httpPost(url, paras, null, postData);
113    }
114
115    /**
116     * Http post 操作
117     *
118     * @param url
119     * @param paras
120     * @param headers
121     * @return
122     */
123    public static String httpPost(String url, Map<String, Object> paras, Map<String, String> headers) {
124        return httpPost(url, paras, headers, null);
125    }
126
127
128    /**
129     * Http post 操作
130     *
131     * @param url
132     * @param paras
133     * @param headers
134     * @param postData
135     * @return
136     */
137    public static String httpPost(String url, Map<String, Object> paras, Map<String, String> headers, String postData) {
138        JbootHttpRequest request = JbootHttpRequest.create(url, paras, JbootHttpRequest.METHOD_POST);
139        request.setBodyContent(postData);
140        request.addHeaders(headers);
141        JbootHttpResponse response = handle(request);
142        return response.isError() ? null : response.getContent();
143    }
144
145
146    /**
147     * 下载文件
148     *
149     * @param url
150     * @param toFile
151     * @return
152     */
153    public static boolean download(String url, File toFile) {
154        return download(url, null, null, toFile);
155    }
156
157
158    /**
159     * 下载文件
160     *
161     * @param url
162     * @param paras
163     * @param toFile
164     * @return
165     */
166    public static boolean download(String url, Map<String, Object> paras, File toFile) {
167        return download(url, paras, null, toFile);
168    }
169
170
171    /**
172     * 下载文件
173     *
174     * @param url
175     * @param paras
176     * @param headers
177     * @param toFile
178     * @return
179     */
180    public static boolean download(String url, Map<String, Object> paras, Map<String, String> headers, File toFile) {
181        JbootHttpRequest request = JbootHttpRequest.create(url, paras, JbootHttpRequest.METHOD_GET);
182        request.setDownloadFile(toFile);
183        request.addHeaders(headers);
184        return handle(request).getError() == null;
185    }
186
187    /**
188     * 上传文件
189     *
190     * @param url
191     * @return
192     */
193    public static String upload(String url, File file) {
194        return upload(url, null, null, file);
195    }
196
197
198    /**
199     * 上传文件
200     *
201     * @param url
202     * @param paras
203     * @param file
204     * @return
205     */
206    public static String upload(String url, Map<String, Object> paras, File file) {
207        return upload(url, paras, null, file);
208    }
209
210
211    /**
212     * 上传文件
213     *
214     * @param url
215     * @param paras
216     * @param headers
217     * @param file
218     * @return
219     */
220    public static String upload(String url, Map<String, Object> paras, Map<String, String> headers, File file) {
221        Map<String, Object> newParas = new HashMap();
222        if (paras != null) {
223            newParas.putAll(paras);
224        }
225
226        newParas.put("uploadFile", file);
227
228        JbootHttpRequest request = JbootHttpRequest.create(url, newParas, JbootHttpRequest.METHOD_POST);
229        request.addHeaders(headers);
230        JbootHttpResponse response = handle(request);
231        return response.isError() ? null : response.getContent();
232    }
233
234
235    public static JbootHttpResponse handle(JbootHttpRequest request) {
236        return JbootHttpManager.me().getJbootHttp().handle(request);
237    }
238
239
240}