1、需求说明
搞了一段时间联通在信业务,由于某些原因,需要对一批号码进行批量退订
2、知识点说明
1、http请求,由于请求接口返回只是类似Error$000000或者OK,采用的是org.apache.commons.httpclient.HttpClient
2、3DES加密
3、BASE64加码解码
3、代码
直接上代码吧,不说废话,主要是TripleDES.java和QuxiaoBY.java两个类
不愿意看的,直接下demo吧demo下载
3.1、TripleDES.java
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class TripleDES {
private static final Cipher cipher = initCipher();
private static final BASE64Encoder base64 = new BASE64Encoder();
private static final Cipher initCipher() {
try {
// 添加新安全算法:PKCS7
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
String algorithm = "DESede/ECB/PKCS7Padding";
SecretKey desKey = new SecretKeySpec(
(new BASE64Decoder())
.decodeBuffer(Common.DES_KEY_STRING),
algorithm);
Cipher tcipher = Cipher.getInstance(algorithm);
tcipher.init(Cipher.ENCRYPT_MODE, desKey);
return tcipher;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String encrypt1(String src) {
return base64.encode(encrypt(src.getBytes()));
}
public static byte[] encrypt(byte[] src) {
try {
return cipher.doFinal(src);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws Exception {
System.out.println("1-->"+encrypt1("12345"));
}
}
3.2、QuxiaoBY.java
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.HashMap;
import java.util.List;
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class QuxiaoBY {
public static void selectbyhaoma() throws SQLException, IOException {
List byhmList = DbUtil.selectAll("select phone,accesstime from t_byhaoma");
//System.out.println("list:" + byhmList.get(0));
for (int i = 0; i < byhmList.size(); i++) {
HashMap<String, Object> hm = (HashMap<String, Object>) byhmList
.get(i);
System.out.println(String.valueOf(i)+"-->>"+hm.get("phone") + "-->>"
+ requesturl(hm));
}
}
public static String desString(HashMap<String, Object> hashMap) throws UnsupportedEncodingException {
String orignalString =Common.SPNUMBER_STRING + "$" + hashMap.get("phone")
+ "$" + Common.SERVICE_TAG_STRING + "$" + hashMap.get("accesstime");
String EncodeStr = URLEncoder.encode(TripleDES
.encrypt1((orignalString)),"UTF-8");
//System.out.println(orignalString+"<<<<>>>"+EncodeStr);
return EncodeStr;
}
public static String requesturl(HashMap<String, Object> hashMap) throws UnsupportedEncodingException {
String strurl = Common.TUIDING_URL + "SpNumber="+Common.SPNUMBER_STRING+"&AccessTime="+((String)hashMap.get("accesstime")).replace(" ", "%20")+"&EncodeStr="+desString(hashMap);
String resultString = "null";
HttpClient httpClient = new HttpClient();
// 创建GET方法的实例
GetMethod getMethod = new GetMethod(strurl);
// 使用系统提供的默认的恢复策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
try {
// 执行getMethod
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: "
+ getMethod.getStatusLine());
}
// 读取内容
byte[] responseBody = getMethod.getResponseBody();
// 处理内容
resultString = new String(responseBody);
} catch (HttpException e) {
// 发生致命的异常,可能是协议不对或者返回的内容有问题
System.out.println("Please check your provided http address!");
e.printStackTrace();
} catch (IOException e) {
// 发生网络异常
e.printStackTrace();
} finally {
// 释放连接
getMethod.releaseConnection();
}
return resultString;
}
public static void main(String[] args) throws IOException, SQLException,
ParseException {
selectbyhaoma();
System.out.println("end");
}
}
3.3、DbUtil.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author zyq
* @created 2016-12-18
*/
public class DbUtil {
public static List selectAll(String sql) throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Class.forName(Common.DRIVER);
conn = DriverManager.getConnection(Common.URL, Common.USERNAME,
Common.PASSWORD);
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if (rs == null)
return Collections.EMPTY_LIST;
ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData(); //得到结果集(rs)的结构信息,比如字段数、字段名等
int columnCount = md.getColumnCount(); //返回此 ResultSet 对象中的列数
List list = new ArrayList();
Map rowData = new HashMap();
while (rs.next()) {
rowData = new HashMap(columnCount);
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));
}
list.add(rowData);
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
}
return null;
}
}
3.4、Common.java
/**
* @author zyq
* @created 2016-12-18
*/
public class Common {
// connect the database
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String DB_NAME = "test";
public static final String USERNAME = "root";
public static final String PASSWORD = "12345";
public static final String IP = "127.0.0.1";
public static final String PORT = "3306";
public static final String URL = "jdbc:mysql://" + IP + ":" + PORT + "/" + DB_NAME+"?characterEncoding=utf-8";
public static final String TUIDING_URL = "http://www.tuiding.com?";//请求地址
public static final String SPNUMBER_STRING ="10650000";//spnumber
public static final String SERVICE_TAG_STRING = "xxxx";//指令
public static final String DES_KEY_STRING = "xxxx";//密钥
}