2012-08-26 27 views
6

我想通过使用Perl LWP的Way2sms发送短信。登录部分正在成功,之后我将cookie保存到本地文件。登录后的欢迎页面显示一个发送短信链接,点击哪一个被重定向到另一个页面,带有两个手机号码和短信文本输入和一个用于提交和发送短信的按钮。 Firebug显示图中所示的页面结构。从Iframe网址和表单的action属性中,我构建了表单操作的绝对URL并相应地提交表单,同时将cookie存储在文件中。但是,短信不发送。我在这里做错了什么?代码如下。 (对于两个文本输入的name属性正确的,采取通过观察萤火虫的源代码,虽然这不是在图像中包含)在Perl中通过Way2sms自动发送短信

use LWP::UserAgent; 
open f, "> way2sms.txt"; 
use HTTP::Cookies; 
my $cookie_jar = HTTP::Cookies->new(
file => "cookies.txt", 
autosave => 1, 
); 

my $ua = LWP::UserAgent->new(
    agent => 
     'Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1', 
    cookie_jar => $cookie_jar, 
); 
my $response = $ua->post(
    'http://site2.way2sms.com/contentt/bar/Login1.action', 
    { 
     username => $user, 
     password => $pass, 
    } 
); 

if ($response->is_redirect) { 
    $response = $ua->get($response->header('Location')); 
    print 5 if $response->decoded_content =~ /Kaustav Mukherjee/i; #prints it, showing that the login is successful 
} 
my $smsresp = $ua->post("http://site5.way2sms.com/jsp/quicksms.action",[MobNo=>$mob,textArea=>'Hello World']); 

enter image description here

+1

一个快速的谷歌搜索显示至少有两个脚本(一个在Ruby中,一个在Python中)从命令行使用Way2SMS。你确定你想重新发明它们吗? –

+0

我知道你提到的脚本。 Python脚本不起作用。在CPAN中也有一个类似的Perl脚本,但是在makefile中出现错误,所以无法正确安装。我不认识Ruby,这就是我为什么要自己做的原因。 – SexyBeast

+0

通过way2sms每天有100个短信的限制。所以,如果你认为这是无限的,那你就错了。 – Prasanth

回答

1

WORKING SCRIPT:(测试6 /月/ 2012 3:00 PM GMT + 5:30)

use LWP::UserAgent; 
    use HTTP::Cookies; 

    my $ua = LWP::UserAgent->new(agent=>"Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1"); 

    $ua->cookie_jar({ file => "/absolute/path/to/cookies.txt", autosave => 1 }); 
    # if windows, use \ instead of/

    # $ua->proxy(['http', 'ftp'], 'http://localhost:9666/'); 

    # below line seems to have done the trick 
    push @{ $ua->requests_redirectable }, 'POST'; 

    my $response = $ua->post(
      'http://site5.way2sms.com/Login1.action',{ 
      "username" => "1234567890", # set your username 
      "password" => "passwd0123", # set your password 
      "userLogin" => "yes", 
      "message" => "", 
      "mobileNo" => "", 
      } 
    ); 

    if($response->is_success && $response->decoded_content =~ /Logout/i){ # you can have your name too in place of Logout 
      print "Logged in!\r\n"; 
    } 

    my $mob = "1234567890"; # mobile to send message to 
    my $mes = "Hello! 123."; # message 

    my $smsresp = $ua->post(
      "http://site5.way2sms.com/quicksms.action", 
      { 
        'Action' => 'dsf45asvd5', 
        'HiddenAction' => 'instantsms', 
        'catnamedis' => 'Birthday', 
        'chkall' => 'on', 
        'MobNo' => $mob, 
        'textArea' => $mes, 
      }); 

    if ($smsresp->is_success && $smsresp->decoded_content =~ /Submitted/i) { 
     print "Sent!\r\n"; 
    } 

P.S.我希望我能拿到赏金过期O_O :)

+0

艰难的运气,我试着完全一样的东西,不工作。可能我忽略了一些CURL配置。 – SexyBeast

+0

你能设置referer吗?你必须将它设置为'http:// site5.way2sms.com/jsp/InstantSMS.jsp' – Prasanth

+0

@Cupidvogel EDITED我的帖子看。你正在向'/ jsp/quicksms.action'发出请求,它应该只是'/ quicksms.action'请立即尝试。 – Prasanth

3

我没有你的登录信息,以便我无法为你测试它。

但您可以使用一些Firefox插件,如TamperData或HttpFox来获取发布的网址和发送的参数。

使用Perl来做出与浏览器相同的请求,那会很好。

顺便说一句,您可以使用一个$ ua发送两个请求,不需要创建另一个LWP :: UserAgent实例。

感谢

+0

但是对于第二个请求,我需要从第一个请求中发送已存储在文件中的cookie,所以我不应该使用新的'$ ua'? – SexyBeast

+1

cookie将保留在第一个请求中的$ ua。所以没关系。 –

+0

但仍然没有发送短信。请帮忙! – SexyBeast

3

您不必建立一个新的用户代理,因为你可以简单地重新使用以前的一个。 AFAIK,cookies将已经在该用户代理中。

请注意:以下是稍微OT。

我看了一下https://metacpan.org/pod/Net::SMS::WAY2SMS

它安装在我的电脑鳍。也许你想再试一次?用你的具体问题在这里开一个新的问题。请随时通知我,所以我们可能会看看它。

+0

这是我试图安装的那个,但它失败了。我会再试一次。同时我会看看是否使用相同的用户代理工作。 – SexyBeast

+0

我更新了代码。它仍然不是发送短信。我研究了你提到的模块的源代码。无法理解,加上他使用机械化。我想如果你尝试一种不同的方法,重新发明轮子是可以接受的! – SexyBeast

+0

当然,TIMTOWTDI :)我必须管理员,很难分析没有凭据的问题。你能在第一次请求之后发布你得到的html代码吗? – capfan

3

您是否尝试过使用Perl模块Net :: SMS :: WAY2SMS通过way2sms.com发送消息?这对我很有效。

要安装尝试:

C:\> perl -MCPAN -e "install Net::SMS::WAY2SMS" 

这里是发送短信代码示例:

use strict; 
use warnings; 
use Net::SMS::WAY2SMS; 

my $sms = Net::SMS::WAY2SMS->new(
    'user' => 'user_name' , 
    'password' => 'secret_password', 
    'mob' => ['1234567890', '0987654321'] 
); 

# multi line sms 
$sms->send(q[testing 
sending 
sms]); 
+0

是的,我知道(阅读上面的答案评论)。我正在尝试通过'LWP'来完成,通过'Mechanize'完成。 – SexyBeast

+0

现在不能正常工作给出以下错误 C:\ Users \ manish \ Desktop> perl test.pl 错误GETing http://wwwl.way2sms.com/jsp/InstantSMS.jsp?val=0:未在lib/ Net/SMS/WAY2SMS.pm(自动进入lib/auto/Net/SMS/WAY2SMS/send.al)第113行。 – pkm

3

实在看不出有什么不对,但这里是我开始寻找的东西:

  • 检查您的浏览器真正的发布请求。确保JavaScript或其他东西不添加在HTML中不可见的变量。
  • Tripple检查MobNo和textArea是否是唯一需要的参数。例如,通常会检查提交按钮,以查看已完成的操作。
  • 查看您在发布信息时获得的输出内容。它是否说了一些关于失败的事情?
  • 尝试直接从您的浏览使后(有FF的插件为),以确保你不被淘汰就缺乏HTTP推荐的

我已经做了刮了很多/假装成浏览器,通常非常乏味。人们添加“安全”检查。通常情况下,您需要回发一个会话变量作为例子。

祝你好运!

*编辑:该网站要求您有一个有效的+91号码注册,所以我不能登录和尝试自己。考虑到该网页上的广告数量,我真的认为他们正在添加某种变量,因为他们靠广告生活,而您试图避开它们。

1

你是不是包括所有的POST领域需要

MobNo= 
textArea= 
HiddenAction=instantsms 
login= 
pass= 
Action= 

这些都需要被包括在内。在PHP中有this script,肯定有效,你可以参考。

+0

我完全不知道Curl。你能否详细说明113-122线的作用? – SexyBeast

+0

它通过您的登录页面的响应来查看您在'$ response-> decoded_content'中找到的页面,并找到匹配的操作字符串。 –

+0

我做过,有一些匹配,但没有一个关于'id'被赋予'action'的值,它们都处理名为'action'的类。 – SexyBeast

0

  1. Way2SMS.com是改变一次隐藏参数 'catnamedis' 每月的价值
  2. Way2SMS.com是增加新的隐藏参数频率较低,像现在他们已经增加了一个叫做“令牌”这取决于用户新parmeter,并与“行动”隐藏参数相同,其也取决于用户。

所以脚本工作的人,没有工作,因为这个变化值的其他,你必须手动登录到您的帐户way2sms.com在一个真正的浏览器,并检查元素,找到令牌的值和行动参数(该值因用户而异)。

这是我的Python Script通过它我能够实现它。 你可以使用它作为一个参考你的Perl程序

注: -尝试了我的剧本之前,根据行动值更改值在脚本中变量“行为”参数为您的帐户,你可以找到与检查元素或Firebug。