java - 如何使用java以编程方式发送短信?

标签 java jakarta-ee sms

我需要通过我的 Java 应用程序发送 SMS。我有一段代码在我使用短信发送站点时运行得非常好。然而,该网站引入了验证码验证,因此我的代码失败了。请找到我尝试过的以下代码。请您指导我通过 Java 发送 SMS 的任何其他替代方案。

package com.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

public class Mobiletry2 
{
private final String LOGIN_URL    = "http://*****.com/login.php";
private final String SEND_SMS_URL = "http://*****.com/home.php";
private final String LOGOUT_URL = "http://*****.com/logout.php?LogOut=1";

private final int MESSAGE_LENGTH = 10;
private final int MOBILE_NUMBER_LENGTH = 140;
private final int PASSWORD_LENGTH = 10;

private String mobileNo;
private String password;
private DefaultHttpClient httpclient;
Mobiletry2(String username,String password)
{
 this.mobileNo = username;
 this.password = password;
 httpclient = new DefaultHttpClient();
}



public boolean isLoggedIn() throws IOException {
 // User Credentials on Login page are sent using POST
 // So create httpost object
 HttpPost httpost = new HttpPost(LOGIN_URL);

 // Add post variables to login url
 List<NameValuePair> nvps = new ArrayList<NameValuePair>();
 nvps.add(new BasicNameValuePair("MobileNoLogin", mobileNo));
 nvps.add(new BasicNameValuePair("LoginPassword", password));
 httpost.setEntity(new UrlEncodedFormEntity(nvps));

 // Execute request
 HttpResponse response = this.httpclient.execute(httpost);

 //Check response entity
 HttpEntity entity = response.getEntity();
       if (entity != null) {
           System.out.println("entity " + slurp(entity.getContent(), 10000000));
           System.out.println("entity " + response.getStatusLine().getStatusCode());

        return true;
       }
 return false;
}

public boolean sendSMS(String toMobile,String message) throws IOException {
 HttpPost httpost = new HttpPost(SEND_SMS_URL);
 List<NameValuePair> nvps = new ArrayList<NameValuePair>();
 nvps.add(new BasicNameValuePair("MobileNos", toMobile));
               nvps.add(new BasicNameValuePair("Message", message));

               httpost.setEntity(new UrlEncodedFormEntity(nvps));
 HttpResponse response = this.httpclient.execute(httpost);
 HttpEntity entity = response.getEntity();
 if(entity != null) {
                       System.out.println("entity " + slurp(entity.getContent(), 10000000));
                       System.out.println("entity " + response.getStatusLine().getStatusCode());
  return true;
 }
 return false;
}

public boolean logoutSMS() throws IOException {
 HttpGet httpGet = new HttpGet(LOGOUT_URL);
 HttpResponse response;
 response = this.httpclient.execute(httpGet);
 HttpEntity entity = response.getEntity();
 if (entity != null) {
  System.out
    .println("entity " + slurp(entity.getContent(), 10000000));
  System.out.println("entity "
    + response.getStatusLine().getStatusCode());
  return true;
 }
 return false;
}


public static String slurp(final InputStream is, final int bufferSize)
{
  final char[] buffer = new char[bufferSize];
  final StringBuilder out = new StringBuilder();
  try {
    final Reader in = new InputStreamReader(is, "UTF-8");
    try {
      for (;;) {
        int rsz = in.read(buffer, 0, buffer.length);
        if (rsz < 0)
          break;
        out.append(buffer, 0, rsz);
      }
    }
    finally {
      in.close();
    }
  }
  catch (UnsupportedEncodingException ex) {
    /* ... */
  }
  catch (IOException ex) {
      /* ... */
  }
  return out.toString();
}

/**
 * @param args
 */
public static void main(String[] args) {
 //Replace DEMO_USERNAME with username of your account
 String username = "********";
 //Replace DEMO_PASSWORD with password of your account
 String password = "****";
 //Replace TARGET_MOBILE with a valid mobile number 
 String toMobile = "****";

 String toMessage = "Hello";

 Mobiletry2 sMS = new Mobiletry2(username, password);
 try{
  if(sMS .isLoggedIn() && sMS .sendSMS(toMobile,toMessage))
  {
   sMS.logoutSMS();
   System.out.println("Message was sent successfully " );
  }
 }
 catch(IOException e)
 {
  System.out.println("Unable to send message, possible cause: " + e.getMessage());
 }
}
}

最佳答案

然后通过sms提供API您正在使用的网络服务。他们必须提供任何替代方案来解决这个问题。Captcha用于防止自动在任何网站上提交。

关于java - 如何使用java以编程方式发送短信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20563059/

相关文章:

java - 图形未出现在 JFrame 中(包括 SSCCE)

java - MAVEN 构建失败 - 无法解决项目 XYZ 的依赖关系

java - servlet.PageNotFound : No mapping found for HTTP request with URI in DispatcherServlet

java - 如何保存从客户端发送到服务器的字符串值?

python - 如何使用 Python/Django 应用程序发送短信?

java - ' ... != null' 还是 'null != ....' 性能最好?

java - ChronicleMap没有手动关闭,从Cleaner中清理

android - 以编程方式发送短信而不在消息应用程序中显示

短信警报可更快地响应错误情况

java - 获取 com.android.volley.ServerError