描述: http通讯基础类
package com.founder.ec.web.util.payments.payeco.http; import com.founder.ec.web.util.payments.payeco.http.ssl.SslConnection; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.Iterator; import java.util.SortedMap; /** * 描述: http通讯基础类 * */ public class HttpClient { private int status; public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public static String REQUEST_METHOD_GET = "GET"; public static String REQUEST_METHOD_POST = "POST"; public String send(String postURL, String requestBody, String sendCharset, String readCharset) { return send(postURL,requestBody,sendCharset,readCharset,300,300); } public String send(String postURL, String requestBody, String sendCharset, String readCharset,String RequestMethod) { return send(postURL,requestBody,sendCharset,readCharset,300,300,RequestMethod); } /** * @param postURL 访问地址 * @param requestBody paramName1=paramValue1¶mName2=paramValue2 * @param sendCharset 发送字符编码 * @param readCharset 返回字符编码 * @param connectTimeout 连接主机的超时时间 单位:秒 * @param readTimeout 从主机读取数据的超时时间 单位:秒 * @return 通讯返回 */ public String send(String url, String requestBody, String sendCharset, String readCharset,int connectTimeout,int readTimeout) { try { return connection(url,requestBody,sendCharset,readCharset,connectTimeout,readTimeout,REQUEST_METHOD_POST); } catch (Exception ex) { ex.printStackTrace(); System.out.print("发送请求[" + url + "]失败," + ex.getMessage()); return null; } } /** * @param postURL 访问地址 * @param requestBody paramName1=paramValue1¶mName2=paramValue2 * @param sendCharset 发送字符编码 * @param readCharset 返回字符编码 * @param connectTimeout 连接主机的超时时间 单位:秒 * @param readTimeout 从主机读取数据的超时时间 单位:秒 * @param RequestMethod GET或POST * @return 通讯返回 */ public String send(String url, String requestBody, String sendCharset, String readCharset,int connectTimeout,int readTimeout,String RequestMethod) { try { return connection(url,requestBody,sendCharset,readCharset,connectTimeout,readTimeout,RequestMethod); } catch (Exception ex) { ex.printStackTrace(); System.out.print("发送请求[" + url + "]失败," + ex.getMessage()); return null; } } public String connection(String postURL, String requestBody, String sendCharset, String readCharset,int connectTimeout,int readTimeout,String RequestMethod)throws Exception { if(REQUEST_METHOD_POST.equals(RequestMethod)){ return postConnection(postURL,requestBody,sendCharset,readCharset,connectTimeout,readTimeout,null); }else if(REQUEST_METHOD_GET.equals(RequestMethod)){ return getConnection(postURL,requestBody,sendCharset,readCharset,connectTimeout,readTimeout,null); }else{ return ""; } } @SuppressWarnings("rawtypes") public String getConnection(String url, String requestBody, String sendCharset, String readCharset,int connectTimeout,int readTimeout,SortedMap reqHead)throws Exception { // Post请求的url,与get不同的是不需要带参数 HttpURLConnection httpConn = null; try { if (!url.contains("https:")) { URL postUrl = new URL(url); // 打开连接 httpConn = (HttpURLConnection) postUrl.openConnection(); } else { SslConnection urlConnect = new SslConnection(); httpConn = (HttpURLConnection) urlConnect.openConnection(url); } httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=" + sendCharset); if(reqHead!=null&&reqHead.size()>0){ Iterator iterator =reqHead.keySet().iterator(); while (iterator.hasNext()) { String key = (String) iterator.next(); String val = (String)reqHead.get(key); httpConn.setRequestProperty(key,val); } } // 设定传送的内容类型是可序列化的java对象 // (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException) httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object"); // 连接主机的超时时间(单位:毫秒) httpConn.setConnectTimeout(1000 * connectTimeout); // 从主机读取数据的超时时间(单位:毫秒) httpConn.setReadTimeout(1000 * readTimeout); // 连接,从postUrl.openConnection()至此的配置必须要在 connect之前完成, // 要注意的是connection.getOutputStream会隐含的进行 connect。 httpConn.connect(); int status = httpConn.getResponseCode(); setStatus(status); if (status != HttpURLConnection.HTTP_OK) { System.out.print("发送请求失败,状态码:[" + status + "] 返回信息:" + httpConn.getResponseMessage()); return null; } BufferedReader reader = new BufferedReader(new InputStreamReader(httpConn .getInputStream(), readCharset)); StringBuffer responseSb = new StringBuffer(); String line = null; while ((line = reader.readLine()) != null) { responseSb.append(line.trim()); } reader.close(); return responseSb.toString().trim(); } finally { httpConn.disconnect(); } } @SuppressWarnings("rawtypes") public String postConnection(String postURL, String requestBody, String sendCharset, String readCharset,int connectTimeout,int readTimeout,SortedMap reqHead)throws Exception { // Post请求的url,与get不同的是不需要带参数 HttpURLConnection httpConn = null; try { if (!postURL.contains("https:")) { URL postUrl = new URL(postURL); // 打开连接 httpConn = (HttpURLConnection) postUrl.openConnection(); } else { SslConnection urlConnect = new SslConnection(); httpConn = (HttpURLConnection) urlConnect.openConnection(postURL); } // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 // http正文内,因此需要设为true, 默认情况下是false; httpConn.setDoOutput(true); // 设置是否从httpUrlConnection读入,默认情况下是true; httpConn.setDoInput(true); // 设定请求的方法为"POST",默认是GET httpConn.setRequestMethod("POST"); // Post 请求不能使用缓存 httpConn.setUseCaches(false); //进行跳转 httpConn.setInstanceFollowRedirects(true); httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=" + sendCharset); if(reqHead!=null&&reqHead.size()>0){ Iterator iterator =reqHead.keySet().iterator(); while (iterator.hasNext()) { String key = (String) iterator.next(); String val = (String)reqHead.get(key); httpConn.setRequestProperty(key,val); } } // 设定传送的内容类型是可序列化的java对象 // (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException) httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object"); // 连接主机的超时时间(单位:毫秒) httpConn.setConnectTimeout(1000 * connectTimeout); // 从主机读取数据的超时时间(单位:毫秒) httpConn.setReadTimeout(1000 * readTimeout); // 连接,从postUrl.openConnection()至此的配置必须要在 connect之前完成, // 要注意的是connection.getOutputStream会隐含的进行 connect。 httpConn.connect(); DataOutputStream out = new DataOutputStream(httpConn.getOutputStream()); out.write(requestBody.getBytes(sendCharset)); out.flush(); out.close(); int status = httpConn.getResponseCode(); setStatus(status); if (status != HttpURLConnection.HTTP_OK) { System.out.print("发送请求失败,状态码:[" + status + "] 返回信息:" + httpConn.getResponseMessage()); return null; } BufferedReader reader = new BufferedReader(new InputStreamReader(httpConn .getInputStream(), readCharset)); StringBuffer responseSb = new StringBuffer(); String line = null; while ((line = reader.readLine()) != null) { responseSb.append(line.trim()); } reader.close(); return responseSb.toString().trim(); } finally { httpConn.disconnect(); } } public static void main(String[] args) { } }
描述: http通讯基础类的更多相关文章
- 基于 Paramiko 的 SSH 通讯类
# -*- coding: UTF-8 -*-import paramikoimport time################################################### ...
- 多平台Client TCP通讯组件
Beetle.NetPackage是一个多平台Client Socket TCP通讯组件(Apache License 2.0),组件制统一的对象协议制定规则,可以灵活方便地通过对象来描述TCP通讯交 ...
- C# 串口操作系列(5)--通讯库雏形
C# 串口操作系列(5)--通讯库雏形 标签: 通讯c#数据分析byteclassstring 2010-08-09 00:07 21378人阅读 评论(73) 收藏 举报 分类: 通讯类库设计(4 ...
- 发送http请求
public static String httpGetSend(String url) { String responseMsg = ""; HttpClient httpCli ...
- java socket编程(也是学习多线程的例子)详细版----转
7.2 面向套接字编程 我们已经通过了解Socket的接口,知其所以然,下面我们就将通过具体的案例,来熟悉Socket的具体工作方式 7.2.1使用套接字实现基于TCP协议的服务器和客户机程序 ...
- [置顶] Django 微信开发(一)——环境搭建
Django 微信开发(一)——环境搭建 随着移动互联网时代的到来,微信——一个改变着我们生活的产品悄悄走近了我们的生活.我们不得不觉得自己很幸运,自己能在这个世界上遇到像QQ.微博.微信这样优秀的产 ...
- 参考sectools,每个人至少查找5种安全工具、库等信息并深入研究至少两种并写出使用教程
1.Nessus Nessus是免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上.它不仅能永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance--终端用户 ...
- 利用Java反射机制优化简单工厂设计模式
之前项目有个需求,审批流程的时候要根据配置发送信息:发送短信.发送邮件.当时看到这个就想到要用工厂模式,为什么要用工厂模式呢?用工厂模式进行大型项目的开发,可以很好的进行项目并行开发.就是一个程序员和 ...
- 工控随笔_22_关于Profibus网络接线的规则
最近在做一个项目调试,用的是西门子的PLC,416-2 DP,下面挂了几个DP子网,在进行现场网络测试的时候,有几个走的DP网络的 绝对值编码器,无论怎么弄DP网络不能联通. 一开始我以为DP网线接的 ...
随机推荐
- iOS 转换异步block为同步方式运行
使用dispatch_semaphore_t 实现 dispatch_semaphore_t sema = dispatch_semaphore_create(0); //创建信号量 __block ...
- 3、Python的应用
Python的应用 Google 实现Web爬虫和搜索引擎中的很多组件. Yahoo Yahoo使用它(包括其他技术)管理讨论组. NASA NASA在它的几个系统中既用了Python开发,又将其作为 ...
- 递归删除服务器log文件
## 进入logs根文件夹 cd /home/admin/logs ## 删除所有的log文件 find . -name "*.log.*" | xargs rm -f
- scala recursive value x$5 needs type
recursive value x$5 needs type的原因是使用了一个类型不确定的变量,例如 val (id, name) = (id, getName(id)) 其中id是个变量,其值还不确 ...
- Swift 计算三角形角度、两条边夹角
/// 计算三点之间的角度 /// /// - Parameters: /// - p1: 点1 /// - p2: 点2(也是角度所在点) /// - p3: 点3 /// - Returns: 角 ...
- mariadb multi-source replication(mariadb多主复制)
下文一起来看看mariadb multi-source replication(mariadb多主复制)例子,希望对各位有帮助. mariadb multi-source replication( ...
- C#-MVC开发微信应用(8)--菜单管理的实现
之前讲解了微信后台管理页面的操作来管理菜单,下面我们在简单的来看一下,代码是如何实现的. 我们要实现获取微信的菜单.创建菜单.删除菜单等操作. 01.首先定义菜单操作的接口: /// <summ ...
- HTML5手机页面里面如何把长按复制避免
在写HTML5手机页面的时候,有时候会写到一些标签是需要用户长按然后放开的 但是微信里面长按就会出现复制,大大影响了用户体验,那么如何可以避免呢? 我也是最近写到这样的页面,总结了一部分,大家可以作为 ...
- Fraunhofer音频技术为MPEG未来高品质3D音频内容传输的标准依据
OFweek电子工程网讯:世界着名的音频和多媒体技术研究机构Fraunhofer IIS的基于信道/对象的方案获选成为未来MPEG-H 3D音频标准的依据,此项标准旨在传输高品质的3D音频内容.MPE ...
- Socket网络编程--简单Web服务器(5)
这一小节我们将实现服务器对get和post的请求进行对cgi程序的调用.对于web服务器以前的章节已经实现了对get和post请求的调用接口,接下来给出对应接口的实现. int WebServer:: ...