- 浏览: 235112 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
cherami:
解法3有问题,在n很大的时候会导致baseNum溢出使得结果不 ...
阶乘算法之一N! 末尾有多少个零 -
yubenjie:
我怎么没看出多线程啊,就单线程再跑嘛
多线程编程之理财 -
fei229670104:
多线程 不错
多线程编程之理财 -
fei229670104:
liujiafei_2007 写道你好,问个问题,取钱时不用判 ...
多线程编程之存钱与取钱 -
liujiafei_2007:
你好,问个问题,取钱时不用判断取出的金额是否大于账户的余额吗? ...
多线程编程之存钱与取钱
一:简介
HTTPCLIENT,通过JAVA基于HTTP协议进行点与点间的通信!
二: 代码举例
测试类:
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.springside.modules.web.struts2.Struts2Utils; import com.asiainfo.boss.inter.boss30.remote.thirdpojo.RecordData; import com.asiainfo.boss.inter.web.remote.RemoteInvokeFunc; import com.asiainfo.util.Md5; import com.asiainfo.util.ParamUtils; import com.asiainfo.util.URLReader; import com.asiainfo.web.action.common.FileUtil; public class Test { private static final String WTJT_ORDER_NUM = "JTMHZHYY"; private static final String WTJT_ORDER_NUM_CX = "JTMHZHYYCX"; private static final String WTJT_KEY = "JTYWTYZXZHYY"; //key=TransactionID+Platform+KEY private static final String WTJT_KEY_CX = "JTYWTYZHYYCX"; //key=TransactionID+Platform+KEY public static void main(String[] args) { String url = "http://218.206.204.204:8888/jttiyan/order/cxzhyyorder.action"; long nowTime = System.currentTimeMillis(); StringBuffer sb = new StringBuffer(); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); sb.append("<GroupOrderCx>"); sb.append("<TransactionID>"); sb.append(nowTime); sb.append("</TransactionID>"); sb.append("<Platform>"); sb.append(WTJT_ORDER_NUM_CX); sb.append("</Platform>"); sb.append("<OrderMsisdn>"); sb.append("15838346666"); sb.append("</OrderMsisdn>"); sb.append("<Key>"); String key = nowTime+WTJT_ORDER_NUM_CX+WTJT_KEY_CX;//TransactionID+Platform+KEY sb.append(Md5.md5s_static(key).toUpperCase()); sb.append("</Key>"); sb.append("</GroupOrderCx>"); String ret; try { ret = URLReader.getBodyURLContent(url, sb.toString(), "UTF-8"); System.out.println("ret="+ret); } catch (Exception e) { e.printStackTrace(); } } }
工具类:
package com.asiainfo.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import com.asiainfo.boss.common.util.XmlUtil;
public class URLReader {
public static String getURLContent(String url,String queryString,String encoding) throws Exception {
HttpClient client = new HttpClient();
// 设置代理服务器地址和端口
//client.getHostConfiguration().setProxy("192.168.200.254", 3128);
// 使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
HttpMethod method = new GetMethod(url);
method.setQueryString(queryString);
try {
int ctimeout = 5000;
int stimeout = 55000;
client.getHttpConnectionManager().getParams().setConnectionTimeout(
ctimeout);
client.getHttpConnectionManager().getParams()
.setSoTimeout(stimeout);
client.executeMethod(method);
// 打印服务器返回的状态
// System.out.println(method.getStatusLine());
InputStream l_urlStream = method.getResponseBodyAsStream();
java.io.BufferedReader l_reader = null;
String sCurrentLine;
StringBuilder sTotalString = new StringBuilder();
l_reader = new java.io.BufferedReader(
new java.io.InputStreamReader(l_urlStream, encoding));
while ((sCurrentLine = l_reader.readLine()) != null) {
sTotalString = sTotalString.append(new StringBuffer(
sCurrentLine));
}
sCurrentLine = null;
l_urlStream.close();
l_urlStream = null;
l_reader.close();
l_reader = null;
method.releaseConnection();
return sTotalString.toString();
} catch (IOException ex) {
throw new Exception(ex.getMessage());
}
}
public static String getPostURLContent(String url, String queryString, String encoding) throws Exception {
HttpClient client = new HttpClient();
// 设置代理服务器地址和端口
//client.getHostConfiguration().setProxy("192.168.200.254", 3128);
HttpMethod method = new PostMethod(url);
method.setQueryString(queryString);
// 使用POST方法
// HttpMethod method = new PostMethod("http://java.sun.com");
try {
int ctimeout = 5000;
int stimeout = 55000;
client.getHttpConnectionManager().getParams().setConnectionTimeout(
ctimeout);
client.getHttpConnectionManager().getParams()
.setSoTimeout(stimeout);
client.executeMethod(method);
// 打印服务器返回的状态
// System.out.println(method.getStatusLine());
InputStream l_urlStream = method.getResponseBodyAsStream();
java.io.BufferedReader l_reader = null;
String sCurrentLine;
StringBuilder sTotalString = new StringBuilder();
l_reader = new java.io.BufferedReader(
new java.io.InputStreamReader(l_urlStream, encoding));
while ((sCurrentLine = l_reader.readLine()) != null) {
sTotalString = sTotalString.append(new StringBuffer(
sCurrentLine));
}
sCurrentLine = null;
l_urlStream.close();
l_urlStream = null;
l_reader.close();
l_reader = null;
method.releaseConnection();
return sTotalString.toString();
} catch (IOException ex) {
throw new Exception(ex.getMessage());
}
}
public static String getBodyURLContent(String url,String body,String encoding) throws Exception {
HttpClient client = new HttpClient();
// 设置代理服务器地址和端口
//client.getHostConfiguration().setProxy("192.168.200.254", 3128);
// 使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
PostMethod method = new PostMethod(url);
//method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
//method.addRequestHeader("Content-Type","text/html;charset=UTF-8");
method.setRequestHeader("Content-Type", "text/html;charset="+encoding);
method.setRequestBody(body);
try {
int ctimeout = 5000;
int stimeout = 55000;
client.getHttpConnectionManager().getParams().setConnectionTimeout(
ctimeout);
client.getHttpConnectionManager().getParams()
.setSoTimeout(stimeout);
client.executeMethod(method);
// 打印服务器返回的状态
// System.out.println(method.getStatusLine());
InputStream l_urlStream = method.getResponseBodyAsStream();
java.io.BufferedReader l_reader = null;
String sCurrentLine;
StringBuilder sTotalString = new StringBuilder();
l_reader = new java.io.BufferedReader(
new java.io.InputStreamReader(l_urlStream, encoding));
while ((sCurrentLine = l_reader.readLine()) != null) {
sTotalString = sTotalString.append(new StringBuffer(
sCurrentLine));
}
sCurrentLine = null;
l_urlStream.close();
l_urlStream = null;
l_reader.close();
l_reader = null;
return sTotalString.toString();
} catch (IOException ex) {
throw ex;
}finally{
method.releaseConnection();
}
}
/*
* 下载一个文件到本地,返回true/false
*/
public static boolean snatchAtFile(String url, String filePath) {
try {
HttpClient client = new HttpClient();
// 设置代理服务器地址和端口
//client.getHostConfiguration().setProxy("192.168.200.254", 3128);
int ctimeout = 5000;
int stimeout = 55000;
client.getHttpConnectionManager().getParams().setConnectionTimeout(
ctimeout);
client.getHttpConnectionManager().getParams()
.setSoTimeout(stimeout);
GetMethod get = new GetMethod(url);
client.executeMethod(get);
File storeFile = new File(filePath);
FileOutputStream output = new FileOutputStream(storeFile);
// 得到网络资源的字节数组,并写入文件
output.write(get.getResponseBody());
output.close();
get.releaseConnection();
} catch (Exception e) {
return false;
}
return true;
}
}
通信结果:
ret的值:
<?xml version="1.0" encoding="UTF-8"?>
<GroupAccOrder>
<TransactionID>1326875539875</TransactionID>
<Platform>JTMHZHYYCX</Platform>
<ResultCode>0000</ResultCode>
<ResultMsg>
<OrderInfo>
<OrderID>1326870197656</OrderID>
<GroupName>公司名称</GroupName>
<OrderTime>2012-01-18 15:03:22</OrderTime>
<OrderSta>1</OrderSta>
<CusManName></CusManName>
<CusMsisdn></CusMsisdn>
</OrderInfo>
<OrderInfo>
<OrderID>1326869919921</OrderID>
<GroupName>公司名称</GroupName>
<OrderTime>2012-01-1814:58:41</OrderTime>
<OrderSta>1</OrderSta>
<CusManName></CusManName>
<CusMsisdn></CusMsisdn>
</OrderInfo>
<OrderInfo>
<OrderID>1326860084421</OrderID>
<GroupName>公司名称</GroupName>
<OrderTime>2012-01-18 12:14:45</OrderTime>
<OrderSta>1</OrderSta>
<CusManName></CusManName>
<CusMsisdn></CusMsisdn>
</OrderInfo>
</ResultMsg>
</GroupAccOrder>
总结:
首先HTTPCLIENT 支持以PostMethod与GetMethod 方式进行通信!除了设置PostMethod的实例与GetMethod有些不同之外,剩下的步骤都差不多。
下面来看看它们的实现步骤:
1. 创建 HttpClient 的实例
2. 创建某种连接方法的实例,在这里是 GetMethod。在 GetMethod 的构造函数中传入待连接的地址
3. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例
4. 读 response
5. 释放连接。无论执行方法是否成功,都必须释放连接
6. 对得到后的内容进行处理
发表评论
-
Enum的深入浅出
2015-06-18 09:34 1476还记得上一篇是如何运用Enum来定义一周的的吗? ... -
JAVA中的Enum
2015-06-17 14:41 1387Enum是计算机编程语言中的一种数据类型---枚举类型。在实 ... -
多线程篇之二JAVA多线程之概念篇
2014-02-24 16:10 1659一:JAVA中的线程 在java中线程的应用类主 ... -
多线程篇之一 概念与原理
2014-02-24 15:47 1893一:线程 线程(英语:thread)是操作系统能够进行运 ... -
JAVA深入浅出流之二字节流
2014-01-14 13:59 2471在《 ... -
JAVA深入浅出流之一IO流
2014-01-14 11:39 4912工作三年了,可自己对文件读写还是一知半解,写代码的时候都不 ... -
JAVA Annotation之定义篇
2013-12-15 14:38 1889Annotation: 译为注释或注解 An a ... -
阶乘算法之一N! 末尾有多少个零
2013-06-07 16:32 7930... -
算法之时间复杂度
2013-06-07 15:11 3066在计算机科学中,算法的时间复杂度是一个函数,它定量描 ... -
JAVA 静态变量与非静态变量初始化顺序之新解
2012-12-28 16:43 3926今天和同事争论一问题,关于静态变量与非静态变量的初始化顺序,谁 ... -
求二进制数中1的个数
2012-08-21 09:56 7868解法一: 对于一个正整数如果是偶数,该数的二 ... -
求最大公约数之四部曲
2012-07-26 18:35 1955解法一: 欧几里得算法 ( 又称辗转 ... -
《编程之美》--中国象棋将帅问题
2012-07-20 14:16 2846最近在看微软研究院出版的《编程之美》一书,对于该书中提到的一些 ... -
java 位移运算与乘法运算
2012-07-09 14:25 5466对于 JAVA 编程中,适当的采用位移运算,会减少代 ... -
Java 求素数运算
2012-06-26 16:06 2285网络上对求素数之解数不胜数,我在此总结归纳一下,同时对一些编码 ... -
JAVA海量数据处理之二(BitMap)
2012-06-20 18:07 12108路漫漫其修远兮,吾将上下而求索。想要更快 ... -
海量数据处理之一
2012-06-18 18:37 2839... -
Java 字节码之解析一
2011-12-01 15:20 5042一: J ... -
Java常用工具--jps
2011-10-30 18:24 2036jps-虚拟 ... -
Map 与 JavaBean之间的转换
2011-10-26 19:55 3540最近项目里需要一个工具类,它的功能是传入一个Map后 ...
相关推荐
以上就是关于"Android&Tomcat服务器Http协议通信"的相关知识点,希望对初学者有所帮助。通过学习和实践,你可以更好地理解和掌握Android客户端与服务器之间的数据交互,为开发更复杂的应用奠定基础。
《--程序--》MyHTTP.rar 是一个包含VC++实现的HTTP协议通信源码的压缩包,专门针对网络通信和HTTP协议编程。这个资源包括了服务器端和客户端的实现,意味着你可以通过此代码理解如何在VC++环境中构建基本的HTTP...
在服务器方面,使用Web服务器,采用HTTP协议来代替底层的socket,是常见的选择。采用HTTP协议更加除了能得到稳定的服务器支持外,更加可以兼容各种客户端(手机、PC、浏览器)等等。这样实现了一个服务器之后,多个...
首先,我们需要理解HTTP协议的基本概念。HTTP是基于TCP/IP协议的应用层协议,主要通过TCP连接进行数据传输。它定义了客户端(通常是浏览器)与服务器之间交换数据的格式和规则。HTTP请求由请求行、请求头、空行和...
ZIP 协议是基于 HTTP 协议开发的面向连接设备及应用系统沟通层(SNA)的轻量级通用协议,可实现远程设备间信息资源的双向传输,并通过一系列通信接口实现互联互通。ZIP 协议共包含 4 个部分:协议层次基本结构、核心...
### 通信协议——Http、TCP、...以上内容全面介绍了HTTP、TCP和UDP三种通信协议的基本概念、特点以及相互之间的关系,特别强调了HTTP协议的工作原理和消息结构,有助于深入理解这些协议在实际网络通信中的作用和意义。
蔡世友HTTP通信协议.ppt
通过对HTTP协议及其与HTTPS的区别、TCP与UDP协议的特点和应用场景的理解,可以帮助我们在实际工作中更好地选择合适的通信协议,并深入理解它们的工作原理和技术细节。这对于解决网络通信中的各种问题具有重要意义。
本篇主要深入解析如何使用HTTP协议进行通信,结合网络编程的相关概念,我们将探讨以下几个核心知识点: 1. **HTTP请求与响应结构**: HTTP通信由客户端发起请求,服务器返回响应。请求由请求行(包含方法、URL和...
在设计一个通信协议时,我们需要考虑许多因素,包括但不限于物联网应用的需求、协议的可靠性和效率。我们可以借鉴已有的通信模型,如OSI七层模型和TCP/IP四层模型,来进行设计。以下是一些关键点: 1. **OSI七层...
HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)则在应用层面上用于Web服务,HTTP是无状态的,HTTPS则增加了加密和认证,确保数据安全。 在实际应用中,选择合适的通信接口和协议至关重要。例如,在物联网...
1. **通信方式**:文档中提到的通信方式可能包括HTTP协议,这是互联网上应用最广泛的一种网络通信协议,用于客户端(如移动应用)向服务器发送请求并接收响应。通常,HTTP协议被用于传输JSON或XML等数据格式,这在...
8. **协议解析**:源代码可能包含对特定网络协议(如HTTP、FTP、SMTP等)的解析代码,理解这些协议的结构和规则是正确实现协议解析的关键。 9. **数据编码与解码**:网络传输的数据通常需要进行编码,如ASCII、UTF-...
这份资料是中控考勤机BS广域网通信协议 push sdk http通信协议,适合做二次开发的人员使用这个文档,这个文档是通信协议,不是sdk开发包
HTTP协议定义了客户端(通常是Web浏览器)如何从Web服务器获取资源,以及服务器如何响应这些请求。这种协议基于请求/响应模型,客户端发送一个HTTP请求到服务器,然后服务器返回一个HTTP响应,包含所请求的数据或...
网络协议是网络通信的基础,它定义了计算机或其他网络设备之间传输数据和通信的方式。网络协议类似于语言或书写系统,是计算机之间相互通信的规则。网络协议通常分为几个层次,每个层次都有不同的协议集合,它们协同...
在IT行业中,串口通信和HTTP协议是两个重要的领域,它们在各种硬件设备与网络服务之间建立起连接。本文将深入探讨如何将串口数据转换为HTTP协议数据,并将其发送到云端,以及源码软件的跨平台特性。 串口通信,也...
HTTP协议是互联网上应用最广泛的一种网络协议,主要用于浏览器和服务器之间的信息传输。在Delphi中,TIdHTTP组件可以用于发送HTTP请求,获取服务器响应,实现网页抓取、API调用等功能。此外,还可以结合...
LIS通信相关,HL7协议/ASTM协议介绍及实例,内含若干厂家的说明文档
倍加福通信协议涉及了OMD系列传感器设备的以太网通信协议的详细描述,包含了传感器参数配置、设备信息、功能特性、网络配置、测量配置以及人机界面配置等多个方面的内容。协议版本是1.02,描述的是R2000系列传感器的...