`
周凡杨
  • 浏览: 235112 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HTTP 协议通信

阅读更多

 

                     

一:简介

 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 支持以PostMethodGetMethod 方式进行通信!除了设置PostMethod的实例与GetMethod有些不同之外,剩下的步骤都差不多。

下面来看看它们的实现步骤:

1. 创建 HttpClient 的实例

  2. 创建某种连接方法的实例,在这里是 GetMethod。在 GetMethod 的构造函数中传入待连接的地址

  3. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例

  4. response

  5. 释放连接。无论执行方法是否成功,都必须释放连接

  6. 对得到后的内容进行处理

 

1
0
分享到:
评论

相关推荐

    Android&Tomcat服务器Http协议通信

    以上就是关于"Android&Tomcat服务器Http协议通信"的相关知识点,希望对初学者有所帮助。通过学习和实践,你可以更好地理解和掌握Android客户端与服务器之间的数据交互,为开发更复杂的应用奠定基础。

    《--程序--》MyHTTP.rar_ vc 网络_HTTP协议_vc http通信_网络通信_通信协议

    《--程序--》MyHTTP.rar 是一个包含VC++实现的HTTP协议通信源码的压缩包,专门针对网络通信和HTTP协议编程。这个资源包括了服务器端和客户端的实现,意味着你可以通过此代码理解如何在VC++环境中构建基本的HTTP...

    基于C++实现HTTP协议通信【100012347】

    在服务器方面,使用Web服务器,采用HTTP协议来代替底层的socket,是常见的选择。采用HTTP协议更加除了能得到稳定的服务器支持外,更加可以兼容各种客户端(手机、PC、浏览器)等等。这样实现了一个服务器之后,多个...

    基于C#的HTTP通信协议

    首先,我们需要理解HTTP协议的基本概念。HTTP是基于TCP/IP协议的应用层协议,主要通过TCP连接进行数据传输。它定义了客户端(通常是浏览器)与服务器之间交换数据的格式和规则。HTTP请求由请求行、请求头、空行和...

    手机主板常用通信协议.pdf

    ZIP 协议是基于 HTTP 协议开发的面向连接设备及应用系统沟通层(SNA)的轻量级通用协议,可实现远程设备间信息资源的双向传输,并通过一系列通信接口实现互联互通。ZIP 协议共包含 4 个部分:协议层次基本结构、核心...

    通信协议——Http、TCP、UDP

    ### 通信协议——Http、TCP、...以上内容全面介绍了HTTP、TCP和UDP三种通信协议的基本概念、特点以及相互之间的关系,特别强调了HTTP协议的工作原理和消息结构,有助于深入理解这些协议在实际网络通信中的作用和意义。

    蔡世友HTTP通信协议.ppt

    蔡世友HTTP通信协议.ppt

    通信协议面试总结

    通过对HTTP协议及其与HTTPS的区别、TCP与UDP协议的特点和应用场景的理解,可以帮助我们在实际工作中更好地选择合适的通信协议,并深入理解它们的工作原理和技术细节。这对于解决网络通信中的各种问题具有重要意义。

    使用HTTP协议实现通信

    本篇主要深入解析如何使用HTTP协议进行通信,结合网络编程的相关概念,我们将探讨以下几个核心知识点: 1. **HTTP请求与响应结构**: HTTP通信由客户端发起请求,服务器返回响应。请求由请求行(包含方法、URL和...

    如何设计一个通信协议.docx

    在设计一个通信协议时,我们需要考虑许多因素,包括但不限于物联网应用的需求、协议的可靠性和效率。我们可以借鉴已有的通信模型,如OSI七层模型和TCP/IP四层模型,来进行设计。以下是一些关键点: 1. **OSI七层...

    通信接口与通信协议,通信接口与通信协议区别

    HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)则在应用层面上用于Web服务,HTTP是无状态的,HTTPS则增加了加密和认证,确保数据安全。 在实际应用中,选择合适的通信接口和协议至关重要。例如,在物联网...

    凤凰书城通信协议文档

    1. **通信方式**:文档中提到的通信方式可能包括HTTP协议,这是互联网上应用最广泛的一种网络通信协议,用于客户端(如移动应用)向服务器发送请求并接收响应。通常,HTTP协议被用于传输JSON或XML等数据格式,这在...

    Visual C++网络通信协议分析(源代码).rar

    8. **协议解析**:源代码可能包含对特定网络协议(如HTTP、FTP、SMTP等)的解析代码,理解这些协议的结构和规则是正确实现协议解析的关键。 9. **数据编码与解码**:网络传输的数据通常需要进行编码,如ASCII、UTF-...

    中控考勤机二次开发BS广域网通信协议 push sdk http通信协议

    这份资料是中控考勤机BS广域网通信协议 push sdk http通信协议,适合做二次开发的人员使用这个文档,这个文档是通信协议,不是sdk开发包

    统一通信平台-http协议

    HTTP协议定义了客户端(通常是Web浏览器)如何从Web服务器获取资源,以及服务器如何响应这些请求。这种协议基于请求/响应模型,客户端发送一个HTTP请求到服务器,然后服务器返回一个HTTP响应,包含所请求的数据或...

    通信入门基础之网络协议

    网络协议是网络通信的基础,它定义了计算机或其他网络设备之间传输数据和通信的方式。网络协议类似于语言或书写系统,是计算机之间相互通信的规则。网络协议通常分为几个层次,每个层次都有不同的协议集合,它们协同...

    串口数据转换成http协议数据发送到云端

    在IT行业中,串口通信和HTTP协议是两个重要的领域,它们在各种硬件设备与网络服务之间建立起连接。本文将深入探讨如何将串口数据转换为HTTP协议数据,并将其发送到云端,以及源码软件的跨平台特性。 串口通信,也...

    Delphi网络通信协议分析与应用实现

    HTTP协议是互联网上应用最广泛的一种网络协议,主要用于浏览器和服务器之间的信息传输。在Delphi中,TIdHTTP组件可以用于发送HTTP请求,获取服务器响应,实现网页抓取、API调用等功能。此外,还可以结合...

    LIS通信相关HL7协议/ASTM协议介绍及实例

    LIS通信相关,HL7协议/ASTM协议介绍及实例,内含若干厂家的说明文档

    倍加福通信协议.pdf

    倍加福通信协议涉及了OMD系列传感器设备的以太网通信协议的详细描述,包含了传感器参数配置、设备信息、功能特性、网络配置、测量配置以及人机界面配置等多个方面的内容。协议版本是1.02,描述的是R2000系列传感器的...

Global site tag (gtag.js) - Google Analytics