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是一个强大的HTTP客户端库,常用于与服务器进行数据交互。在本实例中,我们将讲解如何使用HttpClient来传输XML字符串。首先,我们需要确保引入了正确的依赖,包括Apache HttpClient、HttpMime、...
在实际应用中,使用HttpClient提交XML、form和JSON数据时,需要确保正确设置Content-Type头部,以指示服务器数据的格式。例如,XML请求应设置为`application/xml`,表单数据为`application/x-www-form-urlencoded`,...
HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。
本文将深入探讨如何使用HttpClient来提交数据,以及这两种方法的基本原理和实际应用。 1. **HttpClient简介** Apache HttpClient是一个开源项目,它提供了一个灵活且功能丰富的API,用于执行HTTP请求和处理响应。...
本篇文章将深入探讨如何使用Java的HttpClient库来动态提交网站数据。 首先,我们需要理解HTTP协议的基本概念。HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于从Web服务器传输超文本文档到客户端...
以下是一个简单的示例,展示如何使用Apache HttpClient发送XML数据: ```java import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.PostMethod; import org.apache....
这个库主要用于从远程服务器获取数据,例如JSON、XML或者其他格式的信息。在本项目中,我们可以看到相关的文件结构,这表明这是一个标准的PHP开源项目。 `.gitignore` 文件是用来定义在Git版本控制系统中应该忽略...
在给定的代码片段中,主要展示了如何使用Java中的Apache HttpClient库发送一个包含XML数据的POST请求,并接收响应。下面是对关键部分的详细分析: 1. **导入必要的库**:代码首先导入了处理网络请求、输入输出流...
在我们的场景中,我们发送的是JSON(JavaScript Object Notation)数据,这是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 要使用HttpClient发送POST请求,你需要以下几个步骤: 1. *...
例如,通过HttpClient可以创建一个HTTP GET请求来获取网页内容,或者使用POST方法发送JSON或XML数据到服务器。HttpCore则在幕后处理网络连接的细节,而HttpMime帮助处理复杂的请求体内容。 HttpClient的配置是可...
在处理XML数据时,如果需要从远程服务器获取或提交XML文档,HttpClient可以提供网络通信的支持,如GET、POST等HTTP方法,确保数据的可靠传输。 `httpcore-4.4.5.jar`是HttpClient的核心组件,它提供了HTTP协议的...
6. **请求实体与Content-Type**:对于POST请求,可能需要发送JSON、XML或其他格式的数据。学习如何设置`HttpEntityEnclosingRequestBase`的`entity`属性,以及如何设置正确的`Content-Type`。 7. **连接管理**:...
接收到响应后,HttpClientUtil会解析响应的状态码和内容,确保请求的成功,并将数据以指定格式(如字符串、JSON或XML)返回给调用者。 POST请求在HttpClientUtil中通常用于向服务器提交数据。与GET请求类似,但会...
4. **请求体处理**:对于POST或PUT请求,往往需要附带请求体,如表单数据、JSON或XML格式的数据。客户端需要能够正确处理这些数据并将其发送到服务器。 5. **响应处理**:接收到服务器的响应后,HTTPClient需要解析...
本主题聚焦于“C#提交表单生成XML”,这是一个关于数据交互和存储的常见任务,涉及到网络请求、HTML解析、XML处理以及数据库操作等多个知识点。 首先,让我们详细讨论如何在C#中提交表单。在Web开发中,表单提交...
NameValuePair用于简单键值对数据,而HttpEntity适用于更复杂的数据格式,如MultipartEntity,它可以处理文件上传。在设置完请求参数后,同样通过HttpClient的execute方法发送请求。 3. 支持http和...
根据实际需求,可能需要解析JSON、XML或其他格式的数据。 7. **错误处理**: 在实际应用中,必须考虑请求失败的情况,例如网络问题、服务器错误等。可以检查`HttpResponseMessage.IsSuccessStatusCode`属性来判断...
HttpClient允许你模拟浏览器行为,发送GET、POST以及其他HTTP方法的请求,并处理服务器返回的各种内容,包括HTML、XML、JSON等。在本文中,我们将深入探讨HttpClient的基本用法,以及如何使用它来抓取网页内容。 ...
1. **发送GET请求**:获取网页内容,如读取远程JSON或XML数据。 2. **发送POST请求**:提交表单数据,如登录、注册或上传文件。 3. **处理响应**:解析HTTP响应,提取所需信息,如状态码、响应头和主体内容。 4. **...
通过`HttpEntity`接口,你可以访问响应体,无论是纯文本、XML、JSON数据还是二进制内容。 在安全方面,HttpClient支持SSL/TLS,可以进行安全的HTTPS通信。通过配置`SSLProtocolSocketFactory`,你可以指定证书和...