HttpClient 的具体用法以及SMS短信发送的源码分析

该博客聚焦于SMS短信发送的源码分析,对相关源码进行深入探究,为信息技术领域中短信发送功能的开发和优化提供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SMS短信发送的源码分析

其中包含了使用 HttpClient 发送POST请求的方法:
第一步: HTTPClient httpclient = new DefaultHTTPClient()
第二步: HTTPRequest request = new HTTPRequest(HTTPMethod.POST, url)
第三步: request.addHeader("Conetent-Type", "application/json")
第四步: request.addQueryParameter("key",value)
第五步: request.setConnectionTimeout(毫秒)  //设置http连接的超时时间
第六步: request.setRequestTimeout(毫秒)   //设置http请求的超时时间
第七步: request.setBody(JSONObject body)
后续:  获取结果:
    try {
        HTTPResponse res = this.httpclient.fetch(req);
        this.handleError(res);
        return (new SmsSingleSenderResult()).parseFromHTTPResponse(res);
    } catch (URISyntaxException var14) {
        throw new RuntimeException("API url has been modified, current url: " + this.url);
    }

源码分析

public class SmsSingleSender extends SmsBase {
private String url = "https://yun.tim.qq.com/v5/tlssmssvr/sendsms";

public SmsSingleSender(int appid, String appkey) {
    super(appid, appkey, new DefaultHTTPClient());
}

public SmsSingleSender(int appid, String appkey, HTTPClient httpclient) {
    super(appid, appkey, httpclient);
}

public SmsSingleSenderResult send(int type, String nationCode, String phoneNumber, String msg, String extend, String ext) throws HTTPException, JSONException, IOException {
    long random = SmsSenderUtil.getRandom();
    long now = SmsSenderUtil.getCurrentTime();
    JSONObject body = (new JSONObject()).put("tel", (new JSONObject()).put("nationcode", nationCode).put("mobile", phoneNumber)).put("type", type).put("msg", msg).put("sig", SmsSenderUtil.calculateSignature(this.appkey, random, now, phoneNumber)).put("time", now).put("extend", SmsSenderUtil.isNotEmpty(extend) ? extend : "").put("ext", SmsSenderUtil.isNotEmpty(ext) ? ext : "");
    HTTPRequest req = (new HTTPRequest(HTTPMethod.POST, this.url)).addHeader("Conetent-Type", "application/json").addQueryParameter("sdkappid", this.appid).addQueryParameter("random", random).setConnectionTimeout(60000).setRequestTimeout(60000).setBody(body.toString());

    try {
        HTTPResponse res = this.httpclient.fetch(req);
        this.handleError(res);
        return (new SmsSingleSenderResult()).parseFromHTTPResponse(res);
    } catch (URISyntaxException var14) {
        throw new RuntimeException("API url has been modified, current url: " + this.url);
    }
}

public SmsSingleSenderResult sendWithParam(String nationCode, String phoneNumber, int templateId, ArrayList<String> params, String sign, String extend, String ext) throws HTTPException, JSONException, IOException {
    long random = SmsSenderUtil.getRandom();
    long now = SmsSenderUtil.getCurrentTime();
    JSONObject body = (new JSONObject()).put("tel", (new JSONObject()).put("nationcode", nationCode).put("mobile", phoneNumber)).put("sig", SmsSenderUtil.calculateSignature(this.appkey, random, now, phoneNumber)).put("tpl_id", templateId).put("params", params).put("sign", sign).put("time", now).put("extend", SmsSenderUtil.isNotEmpty(extend) ? extend : "").put("ext", SmsSenderUtil.isNotEmpty(ext) ? ext : "");
    HTTPRequest req = (new HTTPRequest(HTTPMethod.POST, this.url)).addHeader("Conetent-Type", "application/json").addQueryParameter("sdkappid", this.appid).addQueryParameter("random", random).setConnectionTimeout(60000).setRequestTimeout(60000).setBody(body.toString());

    try {
        HTTPResponse res = this.httpclient.fetch(req);
        this.handleError(res);
        return (new SmsSingleSenderResult()).parseFromHTTPResponse(res);
    } catch (URISyntaxException var15) {
        throw new RuntimeException("API url has been modified, current url: " + this.url);
    }
}

public SmsSingleSenderResult sendWithParam(String nationCode, String phoneNumber, int templateId, String[] params, String sign, String extend, String ext) throws HTTPException, JSONException, IOException {
    return this.sendWithParam(nationCode, phoneNumber, templateId, new ArrayList(Arrays.asList(params)), sign, extend, ext);
}

}

接口说明:   这里介绍的是利用清扬短信服务器软件发短信的接口。   清扬短信服务器软件是一个利用了短信猫(Gsm Modem)来收发短信的软件,并支持繁体、日语等多语言短信发送,在某些环境下,比如:在隔离网络中,似乎是收发短信的主要选择。   北京清扬创新提供了一个qyVDevApi.dll,用此dll可建立和短信服务器的沟通。 API接口介绍   int qvdSendSm( void * p0, WCHAR * sm, char * phoneNo, HWND hWnd_notify, int iUsrData ); 参数说明:      p0, 保留      sm, 要发送短信文本, 字符串      phoneNo, 手机号码, 要加区号; 比如: 8613146630221      hWnd_notify, 可收发送后通知的窗口句柄      iUsrData, 一个用户定义的标识 注意: 1.短信服务器发送短信后,将用WM_COPYDATA的消息发送一个响应包到hWnd_notify, 响应包格式如下:    typedef struct __qvdSmResp_t {      int id;      int iErr;    } QVD_SM_RESP; 2. hWnd_notify不是必需的,如果对响应包不感兴趣,不用传入。 如何使用: 1.硬件:把自备短信猫GSM MODEM接入电脑。选择合适的型号,请参看:如何为清扬即时通信挑选短信猫(GSM MODEM)和测试发送短信。 2.软件:用清扬短信服务器软件控制短信发送短信。下载软件,请参看:清扬短信服务器软件快速入门。也有flash视频教程可以更直观地掌握如何使用。 3.软件设置:在利用API向短信服务器发送短信前,要打开菜单[配置]/[个性化策略]里,设置“允许第三方软件发送短信”,(参看http://www.qycx.com/qyexample-sm.htm)。同时注意: 此设置必须在管理员权限下才能设置(否则该设置自动变灰)。 4.编程:使用发送短信API接口编译测试。API接口的例子程序,请参看本文章:清扬短信服务器发送短信API接口说明和例子程序,下载例子:qySrc_smDemo,可以编译测试。该例子qySrc_smDemo利用动态装载将dll装入,找到相关函数地址,即可在后面调用。在使用时,注意将dll目录下的qyVDevApi.dll拷在生成的qyVDevSample.exe同一个目录下。 其他说明: 硬件上,如果短信猫gsm modem的波特率不是9600,请在清扬短信服务器软件管理界面的菜单[配置]/[个性化配置]里,重设波特率(baud),(参看http://www.qycx.com/qyexample-sm.htm)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值