纯 java 实现 Http 资源读取工具,支持发送和接收数据

来源:互联网 发布:淘宝代办食品流通证 编辑:程序博客网 时间:2024/05/27 20:09
原文:纯 java 实现 Http 资源读取工具,支持发送和接收数据,不依赖任何第三方 jar 包
源代码下载地址:http://www.zuidaima.com/share/1550463379950592.htm

纯 java 实现 Http 资源读取工具,支持发送和接收数据,不依赖任何第三方 jar 包

纯 java 实现 Http 资源读取工具,支持发送和接收数据,不依赖任何第三方 jar 包

1. 抓取指定 URL 的资源,可以作为流,也可以作为 String

2. 向指定 URL POST 数据,模拟表单提交。

例如:你想模拟 XXX 自动登陆,然后再发表心情、签名之类的

3. 支持 URL 重定向

/* *    Copyright 2012-2013 The Haohui Network Corporation */package com.haohui.common.utils;/** * @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.zuidaima.com"); *  *     // post *     String res = HttpUtil.post("http://www.zuidaima.com/share/1550463379950592.htm", "This is the data"); * *     // post form *     Map<String, String> params = new HashMap<String, String>(); *     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<String, String> params = new HashMap<String, String>(); *     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, <jos@almende.org> www.zuidaima.com * @date  2012-05-14 */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;/** * https://raw.github.com/wjosdejong/httputil/master/src/com/almende/util/HttpUtil.java *  * @project baidamei * @author cevencheng <cevencheng@gmail.com> * @create 2012-11-17 下午2:35:38 */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<String, String> 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<String, String> 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<String, String> 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<String, String> params,Map<String, String> headers) throws IOException {// set content typeif (headers == null) {headers = new HashMap<String, String>();}headers.put("Content-Type", "application/x-www-form-urlencoded");// parse parametersString 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<String, String> 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<String, String> 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<String, String> 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<String, String> getQueryParams(String url) throws IOException {Map<String, String> params = new HashMap<String, String>();int start = url.indexOf('?');while (start != -1) {// read parameter nameint equals = url.indexOf('=', start);String param = "";if (equals != -1) {param = url.substring(start + 1, equals);}else {param = url.substring(start + 1);}// read parameter valueString 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<String, String> headers) throws IOException {// connectionURL u = new URL(url);HttpURLConnection conn = (HttpURLConnection)u.openConnection();conn.setConnectTimeout(10000);conn.setReadTimeout(10000);// methodif (method != null) {conn.setRequestMethod(method);}// headersif (headers != null) {for(String key : headers.keySet()) {conn.addRequestProperty(key, headers.get(key));}}// bodyif (body != null) {conn.setDoOutput(true);OutputStream os = conn.getOutputStream();os.write(body.getBytes());os.flush();os.close();}// responseInputStream is = conn.getInputStream();String response = streamToString(is);is.close();// handle redirectsif (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();}}    






0 0
原创粉丝点击