- 浏览: 195055 次
- 性别:
- 来自: 杭州
博客专栏
-
Percolator与分布...
浏览量:5674
文章分类
最新评论
-
heglase:
好牛逼 竟然解决了我别的问题
使用jdk工具tools.jar引发的问题 -
wqcva:
在使用这个类的时候workerId应该怎么传
java时间有序id生成 -
沙漠绿树:
增加虚拟节点解决数据均衡的问题。我有个疑问:1.使用虚拟节点后 ...
一致性hash的实现 -
BucketLi:
wangjian95 写道tddl.....?不是
java唯一ID生成 -
wangjian95:
tddl.....?
java唯一ID生成
看了代码,tips一下
这个技巧有点意思的,根据长度来判定是哪种Date字符串
隔一段再记录一个比较示例性的利用httpClient来发送get和post请求的例子,代码
作者 岑文初
/** * 采用java原生方式发送Http请求 * * @param 目标url * @param 发送内容 * @param 需要上传的消息头 * @param Http方法 * @param 内容类型 * @return */ public static byte[] sendRequestV2(String url, String content, Map<String, String> headers, String method, String contenttype) { byte[] result = null; try { HttpURLConnection httpConn = (HttpURLConnection) new URL(url) .openConnection(); // Should never cache GData requests/responses httpConn.setUseCaches(false); // Always follow redirects httpConn.setInstanceFollowRedirects(true); httpConn.setRequestMethod(method); httpConn.setRequestProperty("Content-Type", contenttype); httpConn.setRequestProperty("Accept-Encoding", "gzip"); if (headers != null && headers.size() > 0) { Iterator<String> keys = headers.keySet().iterator(); while (keys.hasNext()) { String key = keys.next(); httpConn.setRequestProperty(key, headers.get(key)); } } httpConn.setDoOutput(true); if (content != null) httpConn.getOutputStream().write(content.getBytes("UTF-8")); System.setProperty("http.strictPostRedirect", "true"); httpConn.connect(); ByteArrayOutputStream bout = new ByteArrayOutputStream(); try { InputStream in = httpConn.getInputStream(); byte[] buf = new byte[500]; int count = 0; while ((count = in.read(buf)) > 0) { bout.write(buf, 0, count); } result = bout.toByteArray(); } catch (Exception ex) { ex.printStackTrace(); } finally { if (bout != null) bout.close(); } System.clearProperty("http.strictPostRedirect"); } catch (Exception e) { logger.error(e, e); } return result; }
这个技巧有点意思的,根据长度来判定是哪种Date字符串
public static Date ymdOrYmdhms2Date(String str) throws ParseException { if (str == null) return null; Date date = null; if (str.length() == 10) { DateFormat f = new SimpleDateFormat("yyyy-MM-dd"); date = f.parse(str); } else if (str.length() == 19) { DateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); date = f.parse(str); } else if (str.length() == 23) { DateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); date = f.parse(str); } else { throw new ParseException("error date foramt: " + str, 0); } return date; }
隔一段再记录一个比较示例性的利用httpClient来发送get和post请求的例子,代码
作者 岑文初
/** * 使用第三方开源httpclient发送http请求 * * @param 目标地址 * @param 参数 * @param 是否需要签名 * ,如果为null,表示不需要签名 * @param http请求的类型 * :get,post * @param 是否需要有附件上传 * ,如果有必须是post类型的http请求 * @param 编码 * @param 签名算法 * ,Hmac和md5 * @param 是否有数据需要放在header中上传 * @param 请求内容类型 * ,可以为null * @return */ public static byte[] sendRequestV1(String url, Map<String, Object> params, String secretCode, String method, Map<String, String> files, String encoding, String signMethod, Map<String, String> headers, String contentType) { HttpClient client = new HttpClient(); byte[] result = null; if (method.equalsIgnoreCase("get")) { GetMethod getMethod = new GetMethod(url); if (contentType == null || contentType.equals("")) getMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); else getMethod.setRequestHeader("Content-Type", contentType); if (headers != null && headers.size() > 0) { Iterator<String> keys = headers.keySet().iterator(); while (keys.hasNext()) { String key = keys.next(); getMethod.setRequestHeader(key, headers.get(key)); } } try { NameValuePair[] getData; if (params != null) { if (secretCode == null) getData = new NameValuePair[params.size()]; else getData = new NameValuePair[params.size() + 1]; Iterator<?> iters = params.keySet().iterator(); int i = 0; while (iters.hasNext()) { String key = (String) iters.next(); getData[i] = new NameValuePair(key, params.get(key).toString()); i++; } if (secretCode != null) { boolean isHMac = false; if (signMethod != null && signMethod.equalsIgnoreCase("hmac")) isHMac = true; String sign = EncryptUtil.signature2(params, secretCode,"md5".equalsIgnoreCase(signMethod), isHMac, PARAMETER_SIGN); getData[i] = new NameValuePair(PARAMETER_SIGN, sign); } getMethod.setQueryString(getData); } client.executeMethod(getMethod); ByteArrayOutputStream bout = new ByteArrayOutputStream(); try { InputStream in = getMethod.getResponseBodyAsStream(); byte[] buf = new byte[500]; int count = 0; while ((count = in.read(buf)) > 0) { bout.write(buf, 0, count); } result = bout.toByteArray(); } catch (Exception ex) { ex.printStackTrace(); } finally { if (bout != null) bout.close(); } } catch (Exception ex) { logger.error(ex, ex); } finally { if (getMethod != null) getMethod.releaseConnection(); } }// end get if (method.equalsIgnoreCase("post")) { PostMethod postMethod = new PostMethod(url); if (headers != null && headers.size() > 0) { Iterator<String> keys = headers.keySet().iterator(); while (keys.hasNext()) { String key = keys.next(); postMethod.setRequestHeader(key, headers.get(key)); } } try { if (contentType == null) { // 带附件的请求处理 if (files != null && files.size() > 0) { Part[] parts; if (secretCode == null) parts = new Part[params.size() + files.size()]; else parts = new Part[params.size() + 1 + files.size()]; Iterator<?> iters = params.keySet().iterator(); int i = 0; while (iters.hasNext()) { String key = (String) iters.next(); parts[i] = new StringPart(key, params.get(key) .toString(), "UTF-8"); i++; } if (secretCode != null) { boolean isHMac = false; if (signMethod != null && signMethod.equalsIgnoreCase("hmac")) isHMac = true; String sign = EncryptUtil.signature(params, secretCode, isHMac, PARAMETER_SIGN); parts[i] = new StringPart(PARAMETER_SIGN, sign); i++; } iters = files.keySet().iterator(); while (iters.hasNext()) { String key = (String) iters.next(); if (files.get(key).toString().startsWith("http://")) { InputStream bin = null; ByteArrayOutputStream bout = new ByteArrayOutputStream(); try { URL fileurl = new URL(files.get(key) .toString()); bin = fileurl.openStream(); byte[] buf = new byte[500]; int count = 0; while ((count = bin.read(buf)) > 0) { bout.write(buf, 0, count); } parts[i] = new FilePart( key, new ByteArrayPartSource( fileurl .getFile() .substring( fileurl .getFile() .lastIndexOf( "/") + 1), bout.toByteArray())); } catch (Exception ex) { logger.error(ex, ex); } finally { if (bin != null) bin.close(); if (bout != null) bout.close(); } } else parts[i] = new FilePart(key, new File(files .get(key).toString())); i++; } postMethod.setRequestEntity(new MultipartRequestEntity( parts, postMethod.getParams())); } else { NameValuePair[] postData; if (params != null) { if (secretCode == null) postData = new NameValuePair[params.size()]; else postData = new NameValuePair[params.size() + 1]; Iterator<?> iters = params.keySet().iterator(); int i = 0; while (iters.hasNext()) { String key = (String) iters.next(); postData[i] = new NameValuePair(key, params .get(key).toString()); i++; } if (secretCode != null) { boolean isHMac = false; if (signMethod != null && signMethod.equalsIgnoreCase("hmac")) isHMac = true; String sign = EncryptUtil.signature(params, secretCode, isHMac, PARAMETER_SIGN); postData[i] = new NameValuePair(PARAMETER_SIGN, sign); } postMethod.setRequestBody(postData); } if (contentType == null || contentType.equals("")) postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); } } else { String content = (String) params.get(params.keySet() .iterator().next()); RequestEntity entiry = new StringRequestEntity(content, contentType, "UTF-8"); postMethod.setRequestEntity(entiry); } client.executeMethod(postMethod); ByteArrayOutputStream bout = new ByteArrayOutputStream(); try { InputStream in = postMethod.getResponseBodyAsStream(); byte[] buf = new byte[500]; int count = 0; while ((count = in.read(buf)) > 0) { bout.write(buf, 0, count); } result = bout.toByteArray(); } catch (Exception ex) { logger.error(ex, ex); } finally { if (bout != null) bout.close(); } } catch (Exception e) { logger.error(e, e); } finally { if (postMethod != null) postMethod.releaseConnection(); } }// end post return result; } /** * 判断是否是Multipart的类型请求 * * @param request * @return */ public static final boolean isMultipartContent(HttpServletRequest request) { if (!"post".equalsIgnoreCase(request.getMethod())) { return false; } String contentType = request.getContentType(); if (contentType == null) { return false; } if (contentType.toLowerCase().startsWith(MULTIPART)) { return true; } return false; }
发表评论
-
Spring Validator 部分注解说明
2021-01-30 17:13 347@AssertFalse Boole ... -
Mac 安装 OpenJDK
2019-07-17 08:05 820现在 ORACLE 新版本 JDK 越发越快,新版本固然好,但 ... -
git fork 分支合并原分支
2019-06-27 10:35 11181. List the current configured ... -
Cobar内存快速检测tips
2017-11-07 17:20 410很长时间没有使用mat,技巧生疏,趁这次使用Cobar(htt ... -
ORACLE CDC增量同步初始化
2016-09-07 22:29 756// Step 1 Find the source tab ... -
一些文章
2015-09-04 14:38 0http://www.biaodianfu.com/herme ... -
java资源加载
2015-04-22 10:04 591tips下。 this.getClass().getReso ... -
使用jdk工具tools.jar引发的问题
2015-04-22 09:31 1723这里tips下这个问题 之前本地开发机使用jdk7进行开发和 ... -
eclipse for mac快捷键
2015-02-26 13:16 701Command + O:显示大纲 Command + D:删除 ... -
zookeeper client的一些操作
2014-11-07 12:30 7261.登陆 ./zkcli.sh -server 127.0.0 ... -
java获取类版本和检查重复代码
2014-10-13 21:59 1383public final class Version { ... -
java代码细节
2014-10-17 09:29 842看代码过程中一些细节记录,不断补充。质量可靠,开发高效的捷径在 ... -
java程序启动的一些设置
2014-09-19 11:14 01. 开启debug,suspend值设置成y会等待debug ... -
java_web开发tips
2014-07-21 09:44 01.这两天接手一个新的应用,打算在上面开发几个api,因为功能 ... -
信息安全基础
2014-07-21 09:46 740转自某微博,这边tips下,虽然很不完全,但是有一些思路 信 ... -
java 的一些排序方法(转)
2014-07-21 09:48 712一些java排序方法,记录下。 package com.ta ... -
Shift-And和Shift-Or ByteBuffer匹配器
2012-09-07 18:15 1514两个ByteBuffer的匹配算法java实现,原作者 庄大侠 ... -
一个简单的BufferPool
2012-08-31 10:15 955一个简单的buffer分配和收集代码,将一大段buffer分片 ... -
一个典型md5生成工具类
2012-08-23 09:27 1151import java.io.UnsupportedEnc ... -
Java程序员常用工具集(转)
2012-08-31 10:18 1027转自庄大侠(killme2008)的博客,我这边收藏下。 原 ...
相关推荐
本篇将详细介绍如何使用Java原生API实现简单的HTTP请求。 首先,我们需要了解HTTP协议的基本概念。HTTP(超文本传输协议)是一种应用层协议,用于在Web服务器和客户端之间传输数据。HTTP请求通常由方法(如GET、...
4.2javaEE_原生Servlet_MySql企业财务管理系统设计与实现(源码+数据库sql+论文+视频齐全)【JAVA】 4.2javaEE_原生Servlet_MySql企业财务管理系统设计与实现(源码+数据库sql+论文+视频齐全)【JAVA】 4.2javaEE_原生...
5.1javaEE_原生Servlet_MySql物流信息网的设计与实现(源码+数据库sql+论文+视频齐全)【JAVA】 5.1javaEE_原生Servlet_MySql物流信息网的设计与实现(源码+数据库sql+论文+视频齐全)【JAVA】 5.1javaEE_原生Servlet_...
针对云原生_、大数据_、智能模型开源项目中,_对使用JAVA_、Python_、Go语言的开源软件或_Open-Audit
在给定的资源中,"react-native-sensor-manager"是一个库,它提供了对Java原生传感器接口的访问,使得在React Native应用中可以方便地集成各种传感器功能。 1. **加速度计**: 加速度计用于测量设备在三个轴上的线性...
在这个场景下,我们将详细探讨如何使用Java原生的HttpURLConnection实现一个GET请求。 首先,我们需要了解GET请求的基本原理。GET请求是最常见的HTTP方法,用于从服务器获取资源。它将参数附加到URL中,以便服务器...
09_02_fmod介绍&播放原生09_02_fmod介绍&播放原生09_02_fmod介绍&播放原生09_02_fmod介绍&播放原生09_02_fmod介绍&播放原生09_02_fmod介绍&播放原生09_02_fmod介绍&播放原生09_02_fmod介绍&播放原生09_02_fmod介绍&...
Java聊天室的设计与实现原生Sevlet_socket(源码+lun文+视频齐全)Java聊天室的设计与实现原生Sevlet_socket(源码+lun文+视频齐全)Java聊天室的设计与实现原生Sevlet_socket(源码+lun文+视频齐全)Java聊天室的设计与...
由于包含了源码,开发者可以深入学习其内部机制,理解如何在Java中处理日期和时间的显示,以及如何利用SWT库创建原生界面。对于学习Java GUI编程或者需要定制时间显示功能的开发者来说,这是一个非常有价值的资源。
javaEE_原生Servlet_MySql网络考试系统的设计与实现(源码+数据库sql+论文+视频齐全)【JAVA】.zip javaEE_原生Servlet_MySql网络考试系统的设计与实现(源码+数据库sql+论文+视频齐全)【JAVA】.zip javaEE_原生Servlet...
javaEE_原生Servlet_MySql塞北村镇旅游网站设计(源码+数据库sql+论文+视频齐全)【JAVA】.zip javaEE_原生Servlet_MySql塞北村镇旅游网站设计(源码+数据库sql+论文+视频齐全)【JAVA】.zip javaEE_原生Servlet_MySql...
云原生训练营 _ Kubernetes 常见面试题汇总.pdf
这就是Java2C出现的原因,它尝试将Java代码转化为C源代码,然后可以使用标准的C编译器进行编译,生成原生机器代码,从而在不依赖JVM的情况下运行。 Java2C的工作原理可能包括以下步骤: 1. 词法分析:Java2C首先对...
javaEE_原生Servlet_MySql酒店管理系统的设计与实现(源码+数据库sql+论文+视频齐全)【JAVA】.zip javaEE_原生Servlet_MySql酒店管理系统的设计与实现(源码+数据库sql+论文+视频齐全)【JAVA】.zip javaEE_原生Servlet...
java发送get,post请求,可以实现与后台交互,代码便捷高效,是原生代码,支持并发性;代码结构清晰易懂,容易上手;
在iOS开发中,原生网络请求是不可或缺的一部分,主要用于与服务器进行数据交互。Objective-C(OC)作为苹果官方推荐的编程语言之一,提供了多种方式进行网络请求。本篇将详细讲解OC中的原生网络请求,包括GET、POST...
为原生_WinPE_3.0_集成桌面环境和常用软件
Java 实现短信发送功能主要涉及网络通信和协议处理,这里我们主要探讨如何使用Java原生API来完成这一任务。在Linux环境下,通过构建可执行的jar包,我们可以将这个功能集成到任何系统中,无需依赖特定的开发环境。 ...
在Android平台上,原生相机(Native Camera)开发是一项核心技能,尤其对于那些希望深度定制相机功能的开发者来说。"camera_salmonrhx_camera_android_原生camera开发_"这个项目显然是一个专注于Android原生相机API...
请注意,因为Java的网络编程限制,这种实现可能不如原生ping命令高效,而且在某些安全配置严格的环境中可能会遇到权限问题。不过,它为Java开发者提供了一种在应用中集成网络检测功能的途径。 总之,"javaping.rar...