纯 java 实现 Http 资源读取工具,支持发送和接收数据,不依赖任何第三方 jar 包
来源:互联网 发布:图灵奖难度 知乎 编辑:程序博客网 时间:2024/04/28 22:43
原文:纯 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 type
- if (headers == null) {
- headers = new HashMap<String, String>();
- }
- 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<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 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<String, String> 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();
- }
- }
阅读全文
0 0
- 纯 java 实现 Http 资源读取工具,支持发送和接收数据,不依赖任何第三方 jar 包
- 纯 java 实现 Http 资源读取工具,支持发送和接收数据,不依赖任何第三方 jar 包
- 纯 java 实现 Http 资源读取工具,支持发送和接收数据
- 纯JS实现的3D标签云,不依赖任何第三方库,支持移动页面
- 不依赖第三方jar包的通过java sax解析本地xml文件的实例代码
- 不依赖第三方jar包的通过java sax解析本地xml文件的实例代码
- java 实现http协议发送接收数据
- 打包jar包时文件读取和第三方jar包的问题
- 打包第三方jar包(打包工具)
- Java使用第三方jar包实现邮件验证码
- DoubleLinkedList独立实现,不依赖任何包
- Java短信注册码与百度api定位(通过http请求实现不需要第三方jar包)
- java打包工具------fat jar(可以打包第三方jar包)
- java 开发第三方常用的第三方jar包
- Java ME添加第三方jar包
- 编译java文件(第三方jar包)
- java第三方jar包介绍
- java 环境变量与第三方jar包
- iOS Block 和 代理的 对比
- Java PDF转图片
- Vue留言板(用了bootstrap简洁大气)
- oom
- 动态规划经典问题
- 纯 java 实现 Http 资源读取工具,支持发送和接收数据,不依赖任何第三方 jar 包
- 实现GPS一辆或多辆小车在百度地图上显示驾驶路线
- OC 如何设置UITableViewCell之间的间距
- 访问者模式
- 聊聊成为大神路上的过程
- Linux 磁盘命令
- 入职10个月有感
- Codeforce A
- RESTClient插件