我正在尝试使用 HttpComponents 通过 way2sms 发送短信。到目前为止,该站点的登录尝试是成功的,因为该网站的登录历史清楚地显示了它,并且我能够从 cookie 中成功获取 JSESSIONID。然而,代码以某种方式无法发送短信本身。相反,对最终 POST 请求的响应是 HTML 页面,其中显示了 msg 和接收者号码的空白文本字段。请让我知道我哪里出错了?这是我的代码,由于明显的原因省略了用户名和密码:
import java.io.*;
import java.util.ArrayList;
import java.util.List;
//import java.util.regex.*;
//import java.net.*;
//import java.util.Vector;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.*;
import org.apache.http.impl.client.*;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.util.EntityUtils;
import org.apache.http.client.entity.GzipDecompressingEntity;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.client.protocol.ClientContext;
/*import org.apache.http.client.entity.*;
import org.apache.http.client.utils.*;*/
import org.apache.http.cookie.ClientCookie;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.cookie.*;
import org.apache.http.cookie.params.*;
public class way2
{
public static void main(String args[]) throws IOException {
System.out.println("1");
String url;
String temp;
String msg="If you get this msg plz fwd to Harsh";
CookieStore MycookieStore;
String cookiename=null;String cookievalue=null;
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET,"UTF-8");
httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT,"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1");
httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,CookiePolicy.BROWSER_COMPATIBILITY );
httpclient.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS,false);
// Prepare a request object for getting session id
url="http://site5.way2sms.com/content/index.html";
httpclient.addRequestInterceptor(new HttpRequestInterceptor() {
public void process(final HttpRequest request,final HttpContext context) throws HttpException, IOException
{
if (!request.containsHeader("Accept")) {
request.addHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
}
if (!request.containsHeader("Accept-Encoding")) {
request.addHeader("Accept-Encoding", "gzip, deflate");
}
if (!request.containsHeader("DNT")) {
request.addHeader("DNT", "1");
}
if (!request.containsHeader("Connection")) {
request.addHeader("Connection", "keep-alive");
}
}
});
httpclient.addResponseInterceptor(new HttpResponseInterceptor() {
public void process(
final HttpResponse response,
final HttpContext context) throws HttpException, IOException {
HttpEntity entity = response.getEntity();
Header ceheader = entity.getContentEncoding();
if (ceheader != null) {
HeaderElement[] codecs = ceheader.getElements();
for (int i = 0; i < codecs.length; i++) {
if (codecs[i].getName().equalsIgnoreCase("gzip")) {
response.setEntity(
new GzipDecompressingEntity(response.getEntity()));
return;
}
}
}
}
});
HttpGet httpget = new HttpGet(url);
System.out.println(httpget.getAllHeaders());
System.out.println("1.2");
// Execute the request
HttpResponse response = httpclient.execute(httpget);
System.out.println("2");
// Examine the response status
System.out.println(response.getStatusLine());
// Get hold of the response entity
HttpEntity entity = response.getEntity();
System.out.println("3");
if (entity != null) {
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(entity.getContent()));
} catch (IOException ex) {
throw ex;
} catch (RuntimeException ex) {
httpget.abort();
throw ex;
}
EntityUtils.consume(entity);
}
//GET request over
//START OF Code for automatic login and storing cookies
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("username", "********"));
nvps.add(new BasicNameValuePair("password","********"));
nvps.add(new BasicNameValuePair("button","Login"));
url = "http://site5.way2sms.com/Login1.action";
HttpPost httppost= new HttpPost(url);
httppost.addHeader("Content-Type", "application/x-www-form-urlencoded");
httppost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.ISO_8859_1));
response = httpclient.execute(httppost);
entity = response.getEntity();
BufferedReader in = new BufferedReader(new InputStreamReader(entity.getContent()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
EntityUtils.consume(entity);
MycookieStore = httpclient.getCookieStore();
List<Cookie> Mycookies = MycookieStore.getCookies();
ClientCookie ck=null;
httpclient.setCookieStore(MycookieStore);
if (Mycookies.isEmpty()) {
System.out.println("None");
} else {
for (int i = 0; i < Mycookies.size(); i++) {
ck=(ClientCookie) Mycookies.get(i);
System.out.println("-hola " + ck.toString());
System.out.println("-hola " + ck.getComment());
System.out.println("-hola " + ck.getCommentURL());
System.out.println("-hola " + ck.getDomain());
System.out.println("-hola " + ck.getName());
cookiename = ck.getName();
cookievalue = ck.getValue();
System.out.println("-hola " + ck.getPath());
System.out.println("-hola " + ck.getValue());
}
}
//END OF Code for automatic login and storing cookies
//WAY2SMS lets you login till this point
//get unique id now
url = "http://site5.way2sms.com/quicksms.action";
List<NameValuePair> nvps1 = new ArrayList<NameValuePair>();
nvps1.add(new BasicNameValuePair("HiddenAction", "instantsms"));
nvps1.add(new BasicNameValuePair("catnamedis","Birthday"));
nvps1.add(new BasicNameValuePair("Action","sa65sdf656fdfd"));
nvps1.add(new BasicNameValuePair("chkall","on"));
nvps1.add(new BasicNameValuePair("MobNo","*********"));
nvps1.add(new BasicNameValuePair("textArea",msg));
nvps1.add(new BasicNameValuePair("bulidguid","username"));
nvps1.add(new BasicNameValuePair("bulidgpwd","*******"));
nvps1.add(new BasicNameValuePair("bulidyuid","username"));
nvps1.add(new BasicNameValuePair("bulidypwd","*******"));
nvps1.add(new BasicNameValuePair("guid1","username"));
nvps1.add(new BasicNameValuePair("gpwd1","*******"));
nvps1.add(new BasicNameValuePair("yuid1","username"));
nvps1.add(new BasicNameValuePair("ypwd1","*******"));
nvps1.add(new BasicNameValuePair("button","Send SMS"));
url = "http://site5.way2sms.com/quicksms.action";
//url="http://site5.way2sms.com/jsp/InstantSMS.jsp";
HttpGet sendsms= new HttpGet(url);
sendsms.addHeader("Content-Type", "application/x-www-form-urlencoded");
sendsms.addHeader("Referer", "http://site5.way2sms.com/jsp/InstantSMS.jsp");
// sendsms.setEntity(new UrlEncodedFormEntity(nvps1, HTTP.ISO_8859_1));
sendsms.setHeader("Cookie", ck.getName()+"="+ck.getValue());
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, MycookieStore);
response = httpclient.execute(sendsms, localContext);
entity = response.getEntity();
BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent()));
EntityUtils.consume(entity);
httpclient.getConnectionManager().shutdown();
System.out.println("1");
}
}
我使用以下 PHP 代码作为参考。此代码完美运行:
<html>
<body>
<?php
function send_sms($userID,$userPWD,$recerverNO,$message)
{
if(strlen($message)>140) // check for message length
{echo "message length exceeds 140 characters" ; exit(); }
$message_urlencode=rawurlencode($message); // message converted into URL encoded form
$cookie_file_path ="/var/www/cookie.txt";
// Cookie file location in your machine with full read and write permission
//START OF Code for getting sessionid
$url="http://site5.way2sms.com/content/index.html";
$header_array[0] = "GET /content/index.html HTTP/1.1";
$header_array[1]= "Host: site5.way2sms.com";
$header_array[2]= "User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1";
$header_array[3]= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$header_array[4]= "Accept-Language: en-us,en;q=0.5";
$header_array[5]= "Accept-Encoding: gzip,deflate";
$header_array[6]= "DNT: 1";
$header_array[7] = "Connection: keep-alive";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header_array);
curl_setopt($ch, CURLOPT_REFERER, $reffer);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
$result = curl_exec ($ch);
curl_close ($ch);
//END OF Code for getting sessionid
//START OF Code for automatic login and storing cookies
$post_data = "username=".$userID."&password=".$userPWD."&button=Login";
$url = "http://site5.way2sms.com/Login1.action";
$header_array[0]="POST /Login1.action HTTP/1.1";
$header_array[1]="Host: site5.way2sms.com";
$header_array[2]="User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1";
$header_array[3]="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$header_array[4]="Accept-Language: en-us,en;q=0.5";
$header_array[5]="Accept-Encoding: gzip, deflate";
$header_array[6]="DNT: 1";
$header_array[7]="Connection: keep-alive";
$header_array[8]="Content-Type: application/x-www-form-urlencoded";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header_array);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt($ch,CURLOPT_REFERER,"http://site5.way2sms.com/content/index.html");
$content = curl_exec( $ch );
$response = curl_getinfo( $ch );
curl_close ($ch);
//END OF Code for automatic login and storing cookies
// START OF Code is getting way2sms unique user ID
$url = "http://site5.way2sms.com/jsp/InstantSMS.jsp";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$content = curl_exec($ch);
curl_close ($ch);
$regex = '/input type="hidden" name="Action" id="Action" value="(.*)"/';
preg_match($regex,$content,$match);
$userID = $match[1];
echo $userID ;
// END OF Code for getting way2sms unique user ID
// START OF Code for sending SMS to Recever
$post_data = "HiddenAction=instantsms&catnamedis=Birthday&Action=".$userID."&chkall=on&MobNo=".$recerverNO."&textArea=".$message_urlencode."&bulidguid=username&bulidgpwd=*******&bulidyuid=username&bulidypwd=*******&guid1=username&gpwd1=*******&yuid1=username&ypwd1=*******";
$url = "http://site5.way2sms.com/quicksms.action";
$header_array[0]="POST /quicksms.action HTTP/1.1";
$header_array[1]="Host: site5.way2sms.com";
$header_array[2]="User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1";
$header_array[3]="Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$header_array[4]="Accept-Language: en-us,en;q=0.5";
$header_array[5]="Accept-Encoding: gzip, deflate";
$header_array[6]="DNT: 1";
$header_array[7]="Connection: keep-alive";
$header_array[8]="Content-Type: application/x-www-form-urlencoded";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header_array);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt($ch,CURLOPT_REFERER,"Referer: http://site5.way2sms.com/jsp/InstantSMS.jsp");
$content = curl_exec( $ch );
$response = curl_getinfo( $ch );
curl_close ($ch);
// END OF Code for sending SMS to Recever
}// end function send_sms
send_sms("uname","psswd","target mobile no","message");
?>
</body>
</html>