`
endeavor416
  • 浏览: 64351 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

HttpClient提交XML格式数据

阅读更多

package com.skywin.simpass.sysinterface.sms.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.skywin.simpass.sysinterface.sms.entity.SMSEntity;

public class SMSAuth {

    // 获得ConnectionManager,设置相关参数
    private static MultiThreadedHttpConnectionManager manager = new MultiThreadedHttpConnectionManager();
    private static int connectionTimeOut = 180000;
    private static int socketTimeOut = 120000;
    private static int maxConnectionPerHost = 5;
    private static int maxTotalConnections = 100;

    // 标志初始化是否完成的flag
    private static boolean initialed = false;

    // LOG4j
    static Logger logger = Logger.getLogger(SMSAuth.class);

    // 初始化ConnectionManger的方法
    private static void SetPara() {
        manager.getParams().setConnectionTimeout(connectionTimeOut);
        manager.getParams().setSoTimeout(socketTimeOut);
        manager.getParams().setDefaultMaxConnectionsPerHost(
                maxConnectionPerHost);
        manager.getParams().setMaxTotalConnections(maxTotalConnections);
        initialed = true;
    }

    /**
     * 对响应结果的处理
     *
     * @param telephone
     */
    public SMSEntity smsAuthResult(String telephone) {
        // int result = -1;
        // String msg = null;

        Map<String, String> m = smsAuthResponse(telephone);
        // result = Integer.parseInt(m.get("RetCode"));
        // System.out.println("返回码:"+m.get("RetCode"));    //返回代码
        // System.out.println("SIMPASS卡号:"+m.get("Value")); //SIMPASS卡号
        SMSEntity entity = new SMSEntity();
        entity.setRetCode(m.get("RetCode"));
        entity.setSimpassNo(m.get("Value"));
        entity.setTelephone(telephone);
        return entity;
    }

    /**
     * 获取响应结果
     *
     * @param telephone
     * @return
     */
    private Map<String, String> smsAuthResponse(String telephone) {
        HttpClient client = new HttpClient(manager);
        //本机代理和端口
        client.getHostConfiguration().setProxy("your proxy", proxy_port);
        //验证地址和端口
        client.getHostConfiguration().setHost("destination_url_ip", port, "http");
        if (initialed != true) {
            SMSAuth.SetPara();
        }
        // 使用POST方式提交数据
        HttpMethod postMethod = getPostMethod(telephone);
        InputStream is = null;
        try {
            logger.debug("正在进行认证!!!!!!!!!!!!!!!");
            client.executeMethod(postMethod);
            if (postMethod.getStatusCode() != HttpStatus.SC_OK) {
                logger.error("Method failed: " + postMethod.getStatusLine());
                return null;
            }
            logger.debug("开始解析数据!!!!!!!!!!!!!!!");
            is = postMethod.getResponseBodyAsStream();
            SAXReader sr = new SAXReader();
            Document document = sr.read(is);
            // 获取根元素
            Element element = document.getRootElement();
            logger.info("认证平台返回的xml:\r" + element.asXML());
            return parseHttpClientData(element);
        } catch (Exception e) {
            e.printStackTrace();
            logger.info("进行认证异常时间TIME************"
                    + new Timestamp(System.currentTimeMillis()));
            return null;
        } finally {
            // 资源的释放
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    return null;
                }
            }
            if (postMethod != null) {
                postMethod.releaseConnection();
            }
        }

    }

    /**
     * 使用POST方式提交数据
     *
     * @return
     *
     */
    private static HttpMethod getPostMethod(String telephone){
        PostMethod post = new PostMethod(
                "/CA-bizcontrol/bizcontrol/Auth.action");

        //POST XML数据
        String requestContent = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
                + "<AuthReq>"
                + "<BPID>110002</BPID>"
                + "<BSID>1100020003</BSID>"
                + "<Type>201</Type>"
                + "<User>" + telephone + "</User>"
                + "<Content></Content>"
                + "<Sign></Sign>"
                + "</AuthReq>";
       
        System.out.println(requestContent);

        //网上的以文件形式POST的方式
        /*
         * File input = new File("D:\\01\\simpass\\auth.xml"); try {
         * post.setRequestBody(new FileInputStream(input)); if (input.length() <
         * Integer.MAX_VALUE) post.setRequestContentLength(input.length()); else
         * post.setRequestContentLength(EntityEnclosingMethod.CONTENT_LENGTH_CHUNKED);
         *  // 指定请求内容的类型 post.setRequestHeader("Content-type", "text/xml;
         * charset=UTF-8"); } catch (FileNotFoundException e) { // TODO
         * Auto-generated catch block e.printStackTrace(); }
         */
       
        //使用StringRequestEntity POST XML
        try {
            post
                    .setRequestEntity(new StringRequestEntity(requestContent, "text/xml",
                            "utf-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        return post;
    }

    /*
     * 解析认证返回数据
     */
    private static Map<String, String> parseHttpClientData(Element root) {
        Hashtable resMap = new Hashtable();
        if (root.getName().equals("AuthResp")) {
            /*
             * resMap.put("AuthResp", element.getName()); resMap.put("RetCode",
             * element.elementText("RetCode"));
             */
            // 获取根元素下的第一个RetCode元素
            Element element = root.element("RetCode");
            resMap.put("RetCode", element.getText());
            // 获得RetResult元素
            Element retResult = root.element("RetResult");

            // 显示RetResult元素的所有子元素
            // displayAllSubElement(retResult);
            List<Element> childs = retResult.elements();
            resMap.put("Type", childs.get(0).getText());
            resMap.put("Value", childs.get(1).getText());
            return resMap;
        } else {
            System.err.println("没有返回结果");
            return null;
        }
    }

    public static void main(String[] args) {
        SMSEntity entity = new SMSAuth().smsAuthResult("13922201109");
        System.out.println("认证平台返回码:" + entity.getRetCode());
    }
}

分享到:
评论

相关推荐

    java 中HttpClient传输xml字符串实例详解

    Java中的HttpClient是一个强大的HTTP客户端库,常用于与服务器进行数据交互。在本实例中,我们将讲解如何使用HttpClient来传输XML字符串。首先,我们需要确保引入了正确的依赖,包括Apache HttpClient、HttpMime、...

    httpClient的xml,form,json提交

    在实际应用中,使用HttpClient提交XML、form和JSON数据时,需要确保正确设置Content-Type头部,以指示服务器数据的格式。例如,XML请求应设置为`application/xml`,表单数据为`application/x-www-form-urlencoded`,...

    Java后端HttpClient Post提交文件流 及服务端接收文件流

    HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。

    以httpclient方式提交数据

    本文将深入探讨如何使用HttpClient来提交数据,以及这两种方法的基本原理和实际应用。 1. **HttpClient简介** Apache HttpClient是一个开源项目,它提供了一个灵活且功能丰富的API,用于执行HTTP请求和处理响应。...

    java动态提交网站httpclient

    本篇文章将深入探讨如何使用Java的HttpClient库来动态提交网站数据。 首先,我们需要理解HTTP协议的基本概念。HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于从Web服务器传输超文本文档到客户端...

    http post 发送xml数据

    以下是一个简单的示例,展示如何使用Apache HttpClient发送XML数据: ```java import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.PostMethod; import org.apache....

    HttpClient 获取数据

    这个库主要用于从远程服务器获取数据,例如JSON、XML或者其他格式的信息。在本项目中,我们可以看到相关的文件结构,这表明这是一个标准的PHP开源项目。 `.gitignore` 文件是用来定义在Git版本控制系统中应该忽略...

    发送Post请求,内容格式为xml,并获取响应内容

    在给定的代码片段中,主要展示了如何使用Java中的Apache HttpClient库发送一个包含XML数据的POST请求,并接收响应。下面是对关键部分的详细分析: 1. **导入必要的库**:代码首先导入了处理网络请求、输入输出流...

    HttpClient发送post请求传输json数据

    在我们的场景中,我们发送的是JSON(JavaScript Object Notation)数据,这是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 要使用HttpClient发送POST请求,你需要以下几个步骤: 1. *...

    httpclient客户端jar.rar

    例如,通过HttpClient可以创建一个HTTP GET请求来获取网页内容,或者使用POST方法发送JSON或XML数据到服务器。HttpCore则在幕后处理网络连接的细节,而HttpMime帮助处理复杂的请求体内容。 HttpClient的配置是可...

    xml解析工具jar包

    在处理XML数据时,如果需要从远程服务器获取或提交XML文档,HttpClient可以提供网络通信的支持,如GET、POST等HTTP方法,确保数据的可靠传输。 `httpcore-4.4.5.jar`是HttpClient的核心组件,它提供了HTTP协议的...

    httpclient手册

    6. **请求实体与Content-Type**:对于POST请求,可能需要发送JSON、XML或其他格式的数据。学习如何设置`HttpEntityEnclosingRequestBase`的`entity`属性,以及如何设置正确的`Content-Type`。 7. **连接管理**:...

    HttpClientUtil

    接收到响应后,HttpClientUtil会解析响应的状态码和内容,确保请求的成功,并将数据以指定格式(如字符串、JSON或XML)返回给调用者。 POST请求在HttpClientUtil中通常用于向服务器提交数据。与GET请求类似,但会...

    HTTPClient(Web客户端)

    4. **请求体处理**:对于POST或PUT请求,往往需要附带请求体,如表单数据、JSON或XML格式的数据。客户端需要能够正确处理这些数据并将其发送到服务器。 5. **响应处理**:接收到服务器的响应后,HTTPClient需要解析...

    c#提交表单生成XML

    本主题聚焦于“C#提交表单生成XML”,这是一个关于数据交互和存储的常见任务,涉及到网络请求、HTML解析、XML处理以及数据库操作等多个知识点。 首先,让我们详细讨论如何在C#中提交表单。在Web开发中,表单提交...

    HttpClientUtil工具类发送get和post请求,支持http和https,支持发送文件

    NameValuePair用于简单键值对数据,而HttpEntity适用于更复杂的数据格式,如MultipartEntity,它可以处理文件上传。在设置完请求参数后,同样通过HttpClient的execute方法发送请求。 3. 支持http和...

    C# post方式提交Form表单

    根据实际需求,可能需要解析JSON、XML或其他格式的数据。 7. **错误处理**: 在实际应用中,必须考虑请求失败的情况,例如网络问题、服务器错误等。可以检查`HttpResponseMessage.IsSuccessStatusCode`属性来判断...

    HttpClient抓取网页Demo

    HttpClient允许你模拟浏览器行为,发送GET、POST以及其他HTTP方法的请求,并处理服务器返回的各种内容,包括HTML、XML、JSON等。在本文中,我们将深入探讨HttpClient的基本用法,以及如何使用它来抓取网页内容。 ...

    org.apache.commons.httpclient-3.1.jar

    1. **发送GET请求**:获取网页内容,如读取远程JSON或XML数据。 2. **发送POST请求**:提交表单数据,如登录、注册或上传文件。 3. **处理响应**:解析HTTP响应,提取所需信息,如状态码、响应头和主体内容。 4. **...

    HttpClient3.1.jar

    通过`HttpEntity`接口,你可以访问响应体,无论是纯文本、XML、JSON数据还是二进制内容。 在安全方面,HttpClient支持SSL/TLS,可以进行安全的HTTPS通信。通过配置`SSLProtocolSocketFactory`,你可以指定证书和...

Global site tag (gtag.js) - Google Analytics