测试飞信免费发送接口API的测试(HTTPClient实现)

使用优点:快捷,方便

使用缺点:用户的各种信息以明文形式在网络中传输不安全.

  仅仅用于测试

package cn.com.vnvtrip.fection.sms.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * 读取fection 的配置信息
 * 
 * @author longgangbai
 * 
 */
public class Env {

private static Logger logger = Logger.getLogger(Env.class.getName());
 private static Properties props = null;
 private static Env env = null;

static {
  // 获取classpath路径配置悉尼性
  File file = new File(Env.class
    .getResource("/fectionService.properties").getFile());

if (file.exists()) {
   try {
    InputStream in = new FileInputStream(file);
    props = new Properties();
    props.load(in);
   } catch (IOException e) {
    logger.log(Level.WARNING, "加载fection 的配置失败!");
   }
  } else {
   logger.log(Level.WARNING, "fection 的配置文件不存在,请检查..");
  }
 }

/**
  * 
  */
 private Env() {
 }

/**
  * 防止获取配置信息发生异步现象
  * 
  */
 public static synchronized Env getEnv() {
  if (env == null) {
   env = new Env();
  }
  return env;
 }

/**
  * 获取配置的 Properties
  * 
  * @return
  */
 public Properties getProperties() {
  return props;
 }

public static void main(String[] args) {
  System.out.println(Env.class.getResource("/fectionService.properties")
    .getFile());
 }
}

package cn.com.vnvtrip.fection.sms.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

/**
 * 
 * @author longgangbai
 * 
 */
public class HTTPClient {
 /**
  * 
  * @param httpurl
  * @return
  */
 public static String execute(String httpurl) {
  // 构建HttpClient的实例的应用
  HttpClient httpclient = new HttpClient();
  // 创建GET方法的实例
  GetMethod getmethod = new GetMethod(httpurl);
  // 创建的POST方法的实例 PostMethod postmethod=new PostMethod(httpurl);

// 使用系统提供的默认的恢复策略
  getmethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
    new DefaultHttpMethodRetryHandler());
  try {
   // 执行GET方法的请求的实例
   int statusCode = httpclient.executeMethod(getmethod);
   // 查看响应的编码的方式
   String responseEncoding = getmethod.getRequestCharSet();
   System.out.println("the response encoding is :" + responseEncoding);
   // 检测发送是否成功的
   if (statusCode != HttpStatus.SC_OK) {
    System.out.println("Method failure:"
      + getmethod.getStatusLine());
   }
   // 得到响应的消息体
   byte[] responseBody = getmethod.getResponseBody();
   return new String(responseBody);
  } catch (HttpException e) {
   System.out.println("please check you provided http address!" + e);
  } catch (IOException e) {
   // 发生网络异常信息
   e.printStackTrace();
  } finally {
   // 释放连接
   getmethod.releaseConnection();
  }
  return null;

}

/**
  * 使用HttpClient调用远程servlet
  * 
  * @param httpurl
  * @param xmlInfo
  * @param map
  * @return
  */
 @SuppressWarnings("unchecked")
 public static InputStream executeHttp(String httpurl, String xmlInfo,
   Map<String, String> map) {
  HttpClient httpclient = new HttpClient();
  // 使用Post发送消息的方法的应用
  PostMethod postmethod = new PostMethod(httpurl);
  ByteArrayRequestEntity requestEntity = new ByteArrayRequestEntity(
    xmlInfo.getBytes(), "text/html; charset=UTF-8");
  InputStream inputstream = null;
  // 设置请求的实体
  postmethod.setRequestEntity(requestEntity);
  // 设置请求的格式
  try {
   // 设置消息头信息
   if (map != null) {
    for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
     Entry<String, String> header = (Entry<String, String>) it
       .next();
     String key = header.getKey();
     String value = header.getValue();
     postmethod.setRequestHeader(key, value);
    }
   }
   // 发送消息的方法的
   httpclient.executeMethod(postmethod);

// 发送成功接受请求的信息
   if (postmethod.getStatusCode() == HttpStatus.SC_OK) {
    inputstream = postmethod.getResponseBodyAsStream();
   } else {
    System.out.println("unexpected failure:"
      + postmethod.getStatusLine());
   }

} catch (HttpException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   postmethod.releaseConnection();
  }
  return inputstream;
 }

/**
  * 使用HttpClient调用远程servlet
  * 
  * @param httpurl
  * @param xmlInfo
  * @param map
  * @return
  */
 @SuppressWarnings("unchecked")
 public static InputStream executeHttp(String httpurl,
   Map<String, String> paramMaps, Map<String, String> map) {
  HttpClient httpclient = new HttpClient();
  // 使用Post发送消息的方法的应用
  PostMethod postmethod = new PostMethod(httpurl);
  InputStream inputstream = null;
  // 设置请求的填入各个表单域的值
  List<NameValuePair> paramList = new ArrayList<NameValuePair>();
  NameValuePair[] params = new NameValuePair[paramMaps.size()];
  if (paramMaps != null) {
   for (Iterator it = paramMaps.entrySet().iterator(); it.hasNext();) {
    Entry<String, String> header = (Entry<String, String>) it
      .next();
    String key = header.getKey();
    String value = header.getValue();
    NameValuePair param = new NameValuePair();
    param.setName(key);
    param.setValue(value);
    paramList.add(param);
   }
  }
  paramList.toArray(params);
  postmethod.setRequestBody(params);
  // 设置请求的格式
  try {
   if (map != null) {
    // 设置消息头信息
    for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
     Entry<String, String> header = (Entry<String, String>) it
       .next();
     String key = header.getKey();
     String value = header.getValue();
     postmethod.setRequestHeader(key, value);
    }
   }
   // 发送消息的方法的
   int statusCode = httpclient.executeMethod(postmethod);
   // 自动转向的方式的应用
   // HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发301或者302
   if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY
     || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {
    Header locationHeader = postmethod.getRequestHeader("location");
    String location = null;
    if (locationHeader != null) {
     location = locationHeader.getValue();
     System.out
       .println("the page was redirected to:" + location);

} else {
     System.out.println("Location field value is null!");
    }
   }
   // 发送成功接受请求的信息
   if (postmethod.getStatusCode() == HttpStatus.SC_OK) {
    inputstream = postmethod.getResponseBodyAsStream();
   } else {
    System.out.println("unexpected failure:"
      + postmethod.getStatusLine());
   }
  } catch (HttpException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   postmethod.releaseConnection();
  }
  return inputstream;
 }
}
package cn.com.vnvtrip.fection.sms.service;

import java.io.InputStream;
import java.util.Map;

import cn.com.vnvtrip.fection.sms.utils.HTTPClient;

public class SMSService {
 private static SMSService smsService = null;

private SMSService() {

}

public static SMSService getSmsService() {
  if (smsService == null) {
   smsService = new SMSService();
  }
  return smsService;
 }

/**
  * 
  * @param httpurl
  * @return
  */
 public String execute(String httpurl) {
  return HTTPClient.execute(httpurl);
 }

/**
  * 使用HttpClient调用远程servlet
  * 
  * @param httpurl
  * @param xmlInfo
  * @param map
  * @return
  */
 @SuppressWarnings("unchecked")
 public InputStream executeHttp(String httpurl, String xmlInfo,
   Map<String, String> map) {
  return HTTPClient.executeHttp(httpurl, xmlInfo, map);
 }

/**
  * 使用HttpClient调用远程servlet
  * 
  * @param httpurl
  * @param xmlInfo
  * @param map
  * @return
  */
 @SuppressWarnings("unchecked")
 public InputStream executeHttp(String httpurl,
   Map<String, String> paramMaps, Map<String, String> map) {
  return HTTPClient.executeHttp(httpurl, paramMaps, map);
 }
}

飞信免费发送接口API的测试 httpClient的更多相关文章

  1. 服务端调用接口API利器之HttpClient

    前言 之前有介绍过HttpClient作为爬虫的简单使用,那么今天在简单的介绍一下它的另一个用途:在服务端调用接口API进行交互.之所以整理这个呢,是因为前几天在测试云之家待办消息接口的时候,有使用云 ...

  2. 开源免费天气预报接口API以及全国所有地区代码!!(国家气象局提供) 【转】

    国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data ...

  3. 开源免费天气预报接口API以及全国全部地区代码!!(国家气象局提供)

    国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data ...

  4. 开源免费天气预报接口API以及全国所有地区代码[值得收藏]

    国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data ...

  5. (转)免费天气预报接口API以及全国所有地区代码!!

    国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data ...

  6. skflow 分类与回归接口API 简单测试

    skflow也即是 tf.contrib.learn, 是 TensorFlow 官方提供的另外一个对 TensorFlow 的高层封装,通过这个封装,用户可以和使用 sklearn 类似的方法使用 ...

  7. 免费的天气API测试接口

    网上几乎所有的天气接口都需要注册key,然后还各种频率限制,每天调用次数才几百次? 太坑爹了吧 一个简单的天气预报功能, 为什么要搞的这么复杂, 收什么费? 推荐一个真正免费的天气API接口, 返回j ...

  8. 飞信免费邮件api,飞信界面

    大家都知道飞信是能够免费发送短信的,可是飞信又没有官方的接口,所以无法借用移动的官方接口实现短信的免费发送,可是还是有一些破解的接口能够使用的. GET方法: 提交格式 http://66.zzuob ...

  9. 开源免费的天气预报接口API以及全国所有地区代码(国家气象局提供)

    天气预报一直是各大网站的一个基本功能,最近小编也想在网站上弄一个,得瑟一下,在网络搜索了很久,终于找到了开源免费的天气预报接口API以及全国所有地区代码(国家气象局提供),具体如下: 国家气象局提供的 ...

随机推荐

  1. 一个线程间的通讯小程序__(Java_Thread_Inout.Output)

    //多线程通讯 //多个线程处理同一资源,但是任务不同 //等待唤醒方法: //wait():将线程变成为冻结状态,线程会被存储在线程池中; //notify():唤醒线程中的一个线程(任意的) // ...

  2. ADO.NET笔记——使用Connection连接数据库,使用Command对象的ExecuteReader()方法创建DataReader对象返回多行数据

    使用Connection连接数据库,使用DataReader访问数据库,并返回多行数据. 相关步骤: 需要引入两个命名空间 using System.Data; using System.Data.S ...

  3. linux 关机方式

    linux 关机命令: 1-  init 0 关机. 具体详情接受可以 init --help 查询 如下: init [OPTIONS...] {COMMAND} Send control comm ...

  4. 5种IO模型

    Unix下可用的5种I/O模型分别是: 阻塞IO 非阻塞IO IO复用(select和poll) 信号驱动式IO(SIGIO) 异步IO(POSIX的aio系列函数)   阻塞式I/O模型:      ...

  5. jQuery WIN 7透明弹出层效果

    jQuery WIN 7透明弹出层效果,点击可以弹出一个透明层的jquery特效,插件可以调弹出框的宽度和高度,很不错的一个弹出层插件. 适用浏览器:IE8.360.FireFox.Chrome.Sa ...

  6. Repeat Header / Keep Header Visible in Tables in RS 2008

    You selected "Repeat header rows on each page" or "Keep header rows visible while scr ...

  7. 【转】Python的XML-RPC简介

    编写客户端提交数据到服务器处理是程序员最常碰到的几个问题之一.各种不同的语言对此都有相应的解决方案.比如Unix下,C程序员们可以用SUNRPC,Java程序员则使用RMI来处理.大多数语言还都可以使 ...

  8. 在Windows 上安装SQL Server的一些注意事项

    基本来说安装SQL Server 单节点数据库并不是很困难的事情,大多可以通过Next来安装完成.其中要注意以下几点 安装.net3.5 可以参考本Blog的一些安装须知. Windows Serve ...

  9. 表达式语言之java对正则表达式的处理

    正则表达式用于字符串匹配,字符串查找,字符串替换等.例如注册email格式的验证等.java中处理正则表达式相关的类主要有java.lang.String,java.util.regex.Patter ...

  10. Visual Studio

    1.必备神器http://www.cnblogs.com/stoneniqiu/p/3488546.html 2.常用快捷键http://www.cnblogs.com/TankXiao/p/3468 ...