java http工具包,Java开源简单实用的Http工具类

/**

* @file HttpUtil.java

*

* @brief

* HttpUtil is a single class containing methods to conveniently perform HTTP

* requests. HttpUtil only uses regular java io and net functionality and does

* not depend on external libraries.

* The class contains methods to perform a get, post, put, and delete request,

* and supports posting forms. Optionally, one can provide headers.

*

* Example usage:

*

* // get

* String res = HttpUtil.get("http://www.google.com");

*

* // post

* String res = HttpUtil.post("http://sendmedata.com", "This is the data");

*

* // post form

* Map params = new HashMap();

* params.put("firstname", "Joe");

* params.put("lastname", "Smith");

* params.put("age", "28");

* String res = HttpUtil.postForm("http://site.com/newuser", params);

*

* // append query parameters to url

* String url = "http://mydatabase.com/users";

* Map params = new HashMap();

* params.put("orderby", "name");

* params.put("limit", "10");

* String fullUrl = HttpUtil.appendQueryParams(url, params);

* // fullUrl = "http://mydatabase.com/user?orderby=name&limit=10"

*

* @license

* Licensed under the Apache License, Version 2.0 (the "License"); you may not

* use this file except in compliance with the License. You may obtain a copy

* of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT

* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the

* License for the specific language governing permissions and limitations under

* the License.

*

* Copyright (c) 2012 Almende B.V.

*

* @author Jos de Jong,

* @date 2012-05-14

*/

package com.almende.util;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLDecoder;

import java.net.URLEncoder;

import java.util.HashMap;

import java.util.Map;

public class HttpUtil {

/**

* Send a get request

* @param url

* @return response

* @throws IOException

*/

static public String get(String url) throws IOException {

return get(url, null);

}

/**

* Send a get request

* @param url Url as string

* @param headers Optional map with headers

* @return response Response as string

* @throws IOException

*/

static public String get(String url,

Map headers) throws IOException {

return fetch("GET", url, null, headers);

}

/**

* Send a post request

* @param url Url as string

* @param body Request body as string

* @param headers Optional map with headers

* @return response Response as string

* @throws IOException

*/

static public String post(String url, String body,

Map headers) throws IOException {

return fetch("POST", url, body, headers);

}

/**

* Send a post request

* @param url Url as string

* @param body Request body as string

* @return response Response as string

* @throws IOException

*/

static public String post(String url, String body) throws IOException {

return post(url, body, null);

}

/**

* Post a form with parameters

* @param url Url as string

* @param params map with parameters/values

* @return response Response as string

* @throws IOException

*/

static public String postForm(String url, Map params)

throws IOException {

return postForm(url, params, null);

}

/**

* Post a form with parameters

* @param url Url as string

* @param params Map with parameters/values

* @param headers Optional map with headers

* @return response Response as string

* @throws IOException

*/

static public String postForm(String url, Map params,

Map headers) throws IOException {

// set content type

if (headers == null) {

headers = new HashMap();

}

headers.put("Content-Type", "application/x-www-form-urlencoded");

// parse parameters

String body = "";

if (params != null) {

boolean first = true;

for (String param : params.keySet()) {

if (first) {

first = false;

}

else {

body += "&";

}

String value = params.get(param);

body += URLEncoder.encode(param, "UTF-8") + "=";

body += URLEncoder.encode(value, "UTF-8");

}

}

return post(url, body, headers);

}

/**

* Send a put request

* @param url Url as string

* @param body Request body as string

* @param headers Optional map with headers

* @return response Response as string

* @throws IOException

*/

static public String put(String url, String body,

Map headers) throws IOException {

return fetch("PUT", url, body, headers);

}

/**

* Send a put request

* @param url Url as string

* @return response Response as string

* @throws IOException

*/

static public String put(String url, String body) throws IOException {

return put(url, body, null);

}

/**

* Send a delete request

* @param url Url as string

* @param headers Optional map with headers

* @return response Response as string

* @throws IOException

*/

static public String delete(String url,

Map headers) throws IOException {

return fetch("DELETE", url, null, headers);

}

/**

* Send a delete request

* @param url Url as string

* @return response Response as string

* @throws IOException

*/

static public String delete(String url) throws IOException {

return delete(url, null);

}

/**

* Append query parameters to given url

* @param url Url as string

* @param params Map with query parameters

* @return url Url with query parameters appended

* @throws IOException

*/

static public String appendQueryParams(String url,

Map params) throws IOException {

String fullUrl = new String(url);

if (params != null) {

boolean first = (fullUrl.indexOf('?') == -1);

for (String param : params.keySet()) {

if (first) {

fullUrl += '?';

first = false;

}

else {

fullUrl += '&';

}

String value = params.get(param);

fullUrl += URLEncoder.encode(param, "UTF-8") + '=';

fullUrl += URLEncoder.encode(value, "UTF-8");

}

}

return fullUrl;

}

/**

* Retrieve the query parameters from given url

* @param url Url containing query parameters

* @return params Map with query parameters

* @throws IOException

*/

static public Map getQueryParams(String url)

throws IOException {

Map params = new HashMap();

int start = url.indexOf('?');

while (start != -1) {

// read parameter name

int equals = url.indexOf('=', start);

String param = "";

if (equals != -1) {

param = url.substring(start + 1, equals);

}

else {

param = url.substring(start + 1);

}

// read parameter value

String value = "";

if (equals != -1) {

start = url.indexOf('&', equals);

if (start != -1) {

value = url.substring(equals + 1, start);

}

else {

value = url.substring(equals + 1);

}

}

params.put(URLDecoder.decode(param, "UTF-8"),

URLDecoder.decode(value, "UTF-8"));

}

return params;

}

/**

* Returns the url without query parameters

* @param url Url containing query parameters

* @return url Url without query parameters

* @throws IOException

*/

static public String removeQueryParams(String url)

throws IOException {

int q = url.indexOf('?');

if (q != -1) {

return url.substring(0, q);

}

else {

return url;

}

}

/**

* Send a request

* @param method HTTP method, for example "GET" or "POST"

* @param url Url as string

* @param body Request body as string

* @param headers Optional map with headers

* @return response Response as string

* @throws IOException

*/

static public String fetch(String method, String url, String body,

Map headers) throws IOException {

// connection

URL u = new URL(url);

HttpURLConnection conn = (HttpURLConnection)u.openConnection();

conn.setConnectTimeout(10000);

conn.setReadTimeout(10000);

// method

if (method != null) {

conn.setRequestMethod(method);

}

// headers

if (headers != null) {

for(String key : headers.keySet()) {

conn.addRequestProperty(key, headers.get(key));

}

}

// body

if (body != null) {

conn.setDoOutput(true);

OutputStream os = conn.getOutputStream();

os.write(body.getBytes());

os.flush();

os.close();

}

// response

InputStream is = conn.getInputStream();

String response = streamToString(is);

is.close();

// handle redirects

if (conn.getResponseCode() == 301) {

String location = conn.getHeaderField("Location");

return fetch(method, location, body, headers);

}

return response;

}

/**

* Read an input stream into a string

* @param in

* @return

* @throws IOException

*/

static public String streamToString(InputStream in) throws IOException {

StringBuffer out = new StringBuffer();

byte[] b = new byte[4096];

for (int n; (n = in.read(b)) != -1;) {

out.append(new String(b, 0, n));

}

return out.toString();

}

}

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点!

本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值