尝试通过创建下面给出的三个Java类从Java应用程序发送短信1.凭据2. URLConnector 3. Way2Sms并运行Way2Sms类,但获取身份验证失败!因为responseCode在Way2Sms java中是404或408 登录方法 ...任何帮助解决这个问题都将不胜感激....
**Way2Sms.java**
package way2sms;
/* Code from this site
*
* http://jtechbits.blogspot.in/2011/06/sending-sms-through-way2sms-in-java.html
*
* */
import java.net.HttpURLConnection;
import java.util.Calendar;
public class Way2Sms
{
private static int responseCode = -1;
private static String userCredentials;
private static String cookie;
private static String token;
private static String site;
private static String actionStr;
private static String random1;
private static String random2;
private static String random3;
private static Credentials credentials = new Credentials();
public static void main(String[] args)
{
login("mynumber", "mypassword");
sendSMS("9663384741", "Hello");
System.out.println("Message has been sent successfully!");
}
private static void setProxy(String host, int port)
{
URLConnector.setProxy(host, port);
}
private static void login(String uid, String pwd)
{
getSite();
preHome();
String location = null;
credentials.set("username", uid);
credentials.append("password", pwd);
credentials.append("userLogin", "no");
credentials.append("button", "Login");
userCredentials = credentials.getUserCredentials();
URLConnector.connect("http://" + site + "/w2sauth.action", false, "POST", cookie, userCredentials);
**responseCode = URLConnector.getResponseCode();**
if(responseCode != HttpURLConnection.HTTP_MOVED_TEMP && responseCode != HttpURLConnection.HTTP_OK)
{
exit("authentication failed!");
}
else
{
location = URLConnector.getLocation();
URLConnector.disconnect();
URLConnector.connect(location, false, "GET", cookie, null);
responseCode = URLConnector.getResponseCode();
if(responseCode != HttpURLConnection.HTTP_MOVED_TEMP && responseCode != HttpURLConnection.HTTP_OK)
{
exit("redirection failed!");
URLConnector.disconnect();
}
}
}
private static void sendSMS(String receiversMobNo, String msg)
{
getActionString();
credentials.reset();
credentials.set("t_15_k_5", random1);
credentials.append("i_m", "sn2sms");
credentials.append("m_15_b", random2);
if(actionStr != null)
credentials.append("kriya", actionStr);
else
{
exit("Action string missing!");
credentials.append(random3, "");
credentials.append(random1, token);
credentials.append("catnamedis", "Birthday");
credentials.append("chkall", "on");
credentials.append("diffNo", Calendar.getInstance().getTime().toString().split(" ")[3]);
credentials.append(random2, receiversMobNo);
credentials.append("txtLen", "" + (140 - msg.length()));
credentials.append("textArea", msg);
userCredentials = credentials.getUserCredentials();
URLConnector.connect("http://" + site + "/jsp/w2ssms.action", false, "POST", cookie + "; 12489smssending34908=67547valdsvsikerexzc435457", userCredentials);
responseCode = URLConnector.getResponseCode();
if(responseCode != HttpURLConnection.HTTP_MOVED_TEMP && responseCode != HttpURLConnection.HTTP_OK)
exit("sendSMS failed!");
URLConnector.disconnect();
}
}
private static void sendSMS(String[] receiversMobNos, String msg)
{
int noOfReceivers = receiversMobNos.length;
for(int i = 0; i < noOfReceivers; i++)
sendSMS(receiversMobNos[i], msg);
}
private static void getSite()
{
URLConnector.connect("http://www.way2sms.com/", false, "GET", null, null);
responseCode = URLConnector.getResponseCode();
if(responseCode != HttpURLConnection.HTTP_MOVED_TEMP && responseCode != HttpURLConnection.HTTP_OK)
exit("getSite failed!");
else
{
site = URLConnector.getLocation();
if(site != null)
site = site.substring(7, site.length() - 1);
}
URLConnector.disconnect();
}
private static void preHome()
{
URLConnector.connect("http://" + site + "/content/prehome.jsp", false, "GET", null, null);
responseCode = URLConnector.getResponseCode();
if(responseCode != HttpURLConnection.HTTP_MOVED_TEMP && responseCode != HttpURLConnection.HTTP_OK)
exit("preHome failed");
else
{
cookie = URLConnector.getCookie();
token = cookie.substring(cookie.indexOf("~") + 1);
}
URLConnector.disconnect();
}
private static void getActionString()
{
URLConnector.connect("http://" + site + "/jsp/SingleSMS.jsp?Token=" + token, false, "GET", cookie, null);
responseCode = URLConnector.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_MOVED_TEMP || responseCode == HttpURLConnection.HTTP_OK)
{
String str = URLConnector.getResponse();
String aStr = "id='kriya' value='";
int index = str.indexOf(aStr);
if(index > 0)
{
index = index + aStr.length();
StringBuffer actionStringChars = new StringBuffer();
char ch = str.charAt(index);
while(ch != '\'')
{
actionStringChars.append(ch);
ch = str.charAt(++index);
}
actionStr = actionStringChars.toString();
getRandom1(str);
getRandom2(str);
getRandom3(str);
}
}
else
{
exit("getActionString failed!");
URLConnector.disconnect();
}
}
private static void getRandom1(String str)
{
String aStr = "id='t_15_k_5'";
int index = str.indexOf(aStr);
if(index > 0)
{
index = index + aStr.length();
StringBuffer random1Chars = new StringBuffer();
char ch = str.charAt(index);
if(ch == '>')
{
ch = str.charAt(++index);
while(ch != '<')
{
random1Chars.append(ch);
ch = str.charAt(++index);
}
}
else
{
index += 8;
ch = str.charAt(index);
while(ch != '\'')
{
random1Chars.append(ch);
ch = str.charAt(++index);
}
}
random1 = random1Chars.toString();
}
}
private static void getRandom2(String str)
{
String aStr = "id='m_15_b'";
int index = str.indexOf(aStr);
if(index > 0)
{
index = index + aStr.length();
StringBuffer random2Chars = new StringBuffer();
char ch = str.charAt(index);
if(ch == '>')
{
ch = str.charAt(++index);
while(ch != '<')
{
random2Chars.append(ch);
ch = str.charAt(++index);
}
}
else
{
index += 8;
ch = str.charAt(index);
while(ch != '\'')
{
random2Chars.append(ch);
ch = str.charAt(++index);
}
}
random2 = random2Chars.toString();
}
}
private static void getRandom3(String str)
{
String aStr = "dnipb";
int index = str.lastIndexOf(aStr);
if(index > 0)
{
index -= 40;
StringBuffer random3Chars = new StringBuffer();
char ch = str.charAt(index);
while(ch != '\"')
{
random3Chars.append(ch);
ch = str.charAt(--index);
}
random3 = random3Chars.reverse().toString();
}
}
private static void exit(String errorMsg)
{
System.err.println(errorMsg);
System.exit(1);
}
}
**URLConnector.java**
package way2sms;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ByteArrayOutputStream;
import java.net.HttpURLConnection;
import java.net.Proxy;
import java.net.URL;
public class URLConnector {
private static HttpURLConnection connection;
private static Proxy proxy;
public static void setProxy(String host, int port) {
proxy = new Proxy(Proxy.Type.HTTP, java.net.InetSocketAddress.createUnresolved(host, port));
}
public static void connect(String urlPath, boolean redirect, String method, String cookie, String credentials)
{
try
{
URL url = new URL(urlPath);
if(null != proxy)
connection = (HttpURLConnection) url.openConnection(proxy);
else
{
connection = (HttpURLConnection) url.openConnection();
connection.setInstanceFollowRedirects(redirect);
if(cookie != null)
connection.setRequestProperty("Cookie", cookie);
if(method != null && method.equalsIgnoreCase("POST"))
{
connection.setRequestMethod(method);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
}
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.4) Gecko/20100101 Firefox/10.0.4");
connection.setUseCaches (false);
connection.setDoInput(true);
connection.setDoOutput(true);
if(credentials != null)
{
DataOutputStream wr = new DataOutputStream (connection.getOutputStream ());
wr.writeBytes (credentials);
wr.flush ();
wr.close ();
}
}
}
catch(Exception exception)
{
System.out.println("Connection error");
}
}
public static String getCookie()
{
String cookie = null;
if(connection != null)
{
String headerName=null;
for (int i = 1; (headerName = connection.getHeaderFieldKey(i)) != null; i++)
{
if (headerName.equals("Set-Cookie"))
{
cookie = connection.getHeaderField(i).split(";")[0];
break;
}
}
}
return cookie;
}
public static String getLocation()
{
String location = null;
if(connection != null)
{
String headerName=null;
for (int i = 1; (headerName = connection.getHeaderFieldKey(i)) != null; i++)
{
if (headerName.equals("Location"))
{
location = connection.getHeaderField(i).split(";")[0];
break;
}
}
}
return location;
}
public static int getResponseCode()
{
int responseCode = -1;
if(connection != null)
{
try
{
responseCode = connection.getResponseCode();
}
catch(Exception exception)
{
System.err.println("Response code error");
}
}
return responseCode;
}
public static String getResponse()
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
if(connection != null)
{
try
{
InputStream is = connection.getInputStream();
int next = is.read();
while (next > -1)
{
bos.write(next);
next = is.read();
}
bos.flush();
}
catch(Exception exception)
{
System.err.println("Response error");
}
}
return new String(bos.toByteArray());
}
public static String getErrorMessage()
{
StringBuilder errorMessage = new StringBuilder();
if(connection != null)
{
try
{
InputStream es = connection.getErrorStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(es));
String line;
while((line = rd.readLine()) != null)
{
errorMessage.append(line);
errorMessage.append("\r\n");
}
rd.close();
}
catch(Exception exception)
{
System.err.println("Error in getting error message");
}
}
return errorMessage.toString();
}
public static void disconnect()
{
if(connection != null)
connection.disconnect();
}
}
**Credentials.java**
package way2sms;
import java.net.URLEncoder;
import java.util.ArrayList;
public class Credentials
{
private ArrayList< String > list = new ArrayList< String >();
public void set(String name, String value) {
StringBuilder buffer = new StringBuilder();
buffer.append(name);
buffer.append("=");
buffer.append(getUTF8String(value));
add(buffer.toString());
}
public void append(String name, String value)
{
StringBuilder buffer = new StringBuilder();
buffer.append("&");
buffer.append(name);
buffer.append("=");
buffer.append(getUTF8String(value));
add(buffer.toString());
}
private void add(String item)
{
list.add(item);
}
private String getUTF8String(String value)
{
String encodedValue = null;
try
{
encodedValue = URLEncoder.encode(value, "UTF-8");
}
catch(Exception exception)
{
System.err.println("Encoding error! Please try agian...");
System.exit(1);
}
return encodedValue;
}
public boolean isEmpty()
{
return list.isEmpty();
}
public void reset()
{
list.clear();
}
public String getUserCredentials()
{
StringBuilder buffer = new StringBuilder();
int size = list.size();
for(int i = 0; i < size; i++)
{
buffer.append(list.get(i));
}
return buffer.toString();
}
}
答案 0 :(得分:0)
这是由于人工验证码是Captcha。现在你无法使用以前的api登录来发送短信。您需要与服务提供商联系。