陈_C_C 2016-08-03 13:46 采纳率: 50%
浏览 4703
已采纳

Java实现短信验证码发送功能

项目结构如图所示:
图片说明
1、创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法
/**

  • 文件说明
  • @Description:扩展说明
  • @Copyright: 2015 dreamtech.com.cn Inc. All right reserved
  • @Version: V6.0 */ package com.demo.util;

import java.io.IOException;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.SimpleHttpConnectionManager;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.*;
/**

  • @Author: feizi
  • @Date: 2015年4月17日 上午9:26:34
  • @ModifyUser: feizi
  • @ModifyDate: 2015年4月17日 上午9:26:34
  • @Version:V6.0
    */
    public class HttpRequestUtil {

    /**

    • HttpClient 模拟POST请求

      • 方法说明
      • @Discription:扩展说明
      • @param url
      • @param params
      • @return String
      • @Author: feizi
      • @Date: 2015年4月17日 下午7:15:59
      • @ModifyUser:feizi
      • @ModifyDate: 2015年4月17日 下午7:15:59 */ public static String postRequest(String url, Map params) { //构造HttpClient的实例 HttpClient httpClient = new HttpClient();

      //创建POST方法的实例
      PostMethod postMethod = new PostMethod(url);

      //设置请求头信息
      postMethod.setRequestHeader("Connection", "close");

      //添加参数
      for (Map.Entry entry : params.entrySet()) {
      postMethod.addParameter(entry.getKey(), entry.getValue());
      }

      //使用系统提供的默认的恢复策略,设置请求重试处理,用的是默认的重试处理:请求三次
      httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false);

      //接收处理结果
      String result = null;
      try {
      //执行Http Post请求
      httpClient.executeMethod(postMethod);

      //返回处理结果
      result = postMethod.getResponseBodyAsString();
      

      } catch (HttpException e) {
      // 发生致命的异常,可能是协议不对或者返回的内容有问题
      System.out.println("请检查输入的URL!");
      e.printStackTrace();
      } catch (IOException e) {
      // 发生网络异常
      System.out.println("发生网络异常!");
      e.printStackTrace();
      } finally {
      //释放链接
      postMethod.releaseConnection();

      //关闭HttpClient实例
      if (httpClient != null) {
          ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown();
          httpClient = null;
      }
      

      }
      return result;
      }

    /**

    • HttpClient 模拟GET请求

      • 方法说明
      • @Discription:扩展说明
      • @param url
      • @param params
      • @return String
      • @Author: feizi
      • @Date: 2015年4月17日 下午7:15:28
      • @ModifyUser:feizi
      • @ModifyDate: 2015年4月17日 下午7:15:28 */ public static String getRequest(String url, Map params) { //构造HttpClient实例 HttpClient client = new HttpClient();

      //拼接参数
      String paramStr = "";
      for (String key : params.keySet()) {
      paramStr = paramStr + "&" + key + "=" + params.get(key);
      }
      paramStr = paramStr.substring(1);

      //创建GET方法的实例
      GetMethod method = new GetMethod(url + "?" + paramStr);

      //接收返回结果
      String result = null;
      try {
      //执行HTTP GET方法请求
      client.executeMethod(method);

      //返回处理结果
      result = method.getResponseBodyAsString();
      

      } catch (HttpException e) {
      // 发生致命的异常,可能是协议不对或者返回的内容有问题
      System.out.println("请检查输入的URL!");
      e.printStackTrace();
      } catch (IOException e) {
      // 发生网络异常
      System.out.println("发生网络异常!");
      e.printStackTrace();
      } finally {
      //释放链接
      method.releaseConnection();

      //关闭HttpClient实例
      if (client != null) {
          ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown();
          client = null;
      }
      

      }
      return result;
      }
      }
      2、再创建一个类,生成验证码,然后传递相应的参数
      /**

      • 文件说明
      • @Description:扩展说明
      • @Copyright: 2015 dreamtech.com.cn Inc. All right reserved
      • @Version: V6.0 */ package com.demo.util;

import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

/**

  • @Author: feizi
  • @Date: 2015年4月17日 上午9:24:48
  • @ModifyUser: feizi
  • @ModifyDate: 2015年4月17日 上午9:24:48
  • @Version:V6.0
    */
    public class SendMsgUtil {

    /**

    • 发送短信消息

      • 方法说明
      • @Discription:扩展说明
      • @param phones
      • @param content
      • @return
      • @return String
      • @Author: feizi
      • @Date: 2015年4月17日 下午7:18:08
      • @ModifyUser:feizi
      • @ModifyDate: 2015年4月17日 下午7:18:08 */ @SuppressWarnings("deprecation") public static String sendMsg(String phones,String content){ //短信接口URL提交地址 String url = "短信接口URL提交地址";

      Map params = new HashMap();

      params.put("zh", "用户账号");
      params.put("mm", "用户密码");
      params.put("dxlbid", "短信类别编号");
      params.put("extno", "扩展编号");

      //手机号码,多个号码使用英文逗号进行分割
      params.put("hm", phones);
      //将短信内容进行URLEncoder编码
      params.put("nr", URLEncoder.encode(content));

      return HttpRequestUtil.getRequest(url, params);
      }

    /**

    • 随机生成6位随机验证码
      • 方法说明
      • @Discription:扩展说明
      • @return
      • @return String
      • @Author: feizi
      • @Date: 2015年4月17日 下午7:19:02
      • @ModifyUser:feizi
      • @ModifyDate: 2015年4月17日 下午7:19:02 */ public static String createRandomVcode(){ //验证码 String vcode = ""; for (int i = 0; i < 6; i++) { vcode = vcode + (int)(Math.random() * 9); } return vcode; }

    /**

    • 测试
      • 方法说明
      • @Discription:扩展说明
      • @param args
      • @return void
      • @Author: feizi
      • @Date: 2015年4月17日 下午7:26:36
      • @ModifyUser:feizi
      • @ModifyDate: 2015年4月17日 下午7:26:36 */ public static void main(String[] args) { // System.out.println(SendMsgUtil.createRandomVcode()); // System.out.println("&ecb=12".substring(1)); System.out.println(sendMsg("18123456789,15123456789", "尊敬的用户,您的验证码为" + SendMsgUtil.createRandomVcode() + ",有效期为60秒,如有疑虑请详询400-069-2886(客服电话)【XXX中心】")); } }

现在是HttpRequestUtil中报如下错误:
1:
图片说明
The method getParams() is undefined for the type HttpClient
2:
图片说明
The method shutdown() is undefined for the type SimpleHttpConnectionManager

  • 写回答

4条回答 默认 最新

  • ljheee 2016-08-03 16:05
    关注

    zhe这需要那个第三方的jar包吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站