现在的位置: 首页 > 综合 > 正文

通过 java sockt 通信方式调用第三方短信接口发送短信

2017年12月02日 ⁄ 综合 ⁄ 共 3056字 ⁄ 字号 评论关闭

在项目发送短信方案中通过第三方提供的http链接方式来发送短信,采用了java sockt方案来解决,但是在应用过程中出现了一个奇怪的问题,加以记录:

代码如下:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;
/**
 * 发送短信
 * @author Administrator
 * 
 */
public class SendSms {
	public static void sendMessage(String phone,String message){
		try {
			//message = message.replace(" ", "_");
			URL url = new URL("http://219.130.221.131:8080/smsInterface/servlet/SendSms?tomobile="+phone+"&smscontent="+message+"&source=xzfwzx&xcode=300003");
			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
			conn.setDoOutput(true);
			conn.setRequestMethod("POST");
			String req = String.format("req=%s",URLEncoder.encode("gbk2312","utf-8"));
			OutputStream out = conn.getOutputStream();
			BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
			writer.write(req);
			writer.flush();
			
			
			//read response
			InputStreamReader isr = new InputStreamReader(conn.getInputStream(),"utf-8");
			BufferedReader reader = new BufferedReader(isr);
			
			StringBuffer res = new StringBuffer("");
			String flag = "";
			while ((flag = reader.readLine()) != null) {
				res.append(flag);
			}
			out.close();
			writer.close();
			reader.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args){
		String phone = "13575745002";
		String message = "你存在催办业务,业务编号:2013120011,受理时间:2013-12-06 15:36:40.0,现阶段剩余时间:1天,请抓紧时间办理!发送时间:"+new Date().toLocaleString();
		SendSms.sendMessage(phone, message);
	}
}

sokect报错:
Server returned HTTP response code: 505 for URL 
原因:因为url中包含空格,
解决方案:替换掉短信息中的空格

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;
/**
 * 发送短信
 * @author Administrator
 * 
 */
public class SendSms {
	public static void sendMessage(String phone,String message){
		try {
			message = message.replace(" ", "_");
			URL url = new URL("http://219.130.221.131:8080/smsInterface/servlet/SendSms?tomobile="+phone+"&smscontent="+message+"&source=xzfwzx&xcode=300003");
			HttpURLConnection conn = (HttpURLConnection)url.openConnection();
			conn.setDoOutput(true);
			conn.setRequestMethod("POST");
			String req = String.format("req=%s",URLEncoder.encode("gbk2312","utf-8"));
			OutputStream out = conn.getOutputStream();
			BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
			writer.write(req);
			writer.flush();
			
			
			//read response
			InputStreamReader isr = new InputStreamReader(conn.getInputStream(),"utf-8");
			BufferedReader reader = new BufferedReader(isr);
			
			StringBuffer res = new StringBuffer("");
			String flag = "";
			while ((flag = reader.readLine()) != null) {
				res.append(flag);
			}
			out.close();
			writer.close();
			reader.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args){
		String phone = "13575745002";
		String message = "你存在催办业务,业务编号:2013120011,受理时间:2013-12-06 15:36:40.0,现阶段剩余时间:1天,请抓紧时间办理!发送时间:"+new Date().toLocaleString();
		SendSms.sendMessage(phone, message);
	}
}

如此,问题解决了。

但是还是不知道java sockt通信问什么会因为空格而导致报错,但是这样的确解决了问题。短信可以成功发送.

抱歉!评论已关闭.