通过Perl中的Way2sms自动发送短信

时间:2012-08-26 08:44:14

标签: perl lwp lwp-useragent way2sms

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

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

8 个答案:

答案 0 :(得分:3)

我没有您的登录信息,因此我无法为您测试。

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

使用Perl与浏览器发出相同的请求,这样做会很好。

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

由于

答案 1 :(得分:3)

您不必设置新的用户代理,因为您可以简单地重复使用前一个。 AFAIK,cookie已经在该用户代理中。

请注意:以下是OT。

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

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

答案 2 :(得分: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]);

答案 3 :(得分:3)

无法真正看出错误,但以下是我开始关注的事情:

  • 从浏览器中检查您的真实帖子请求。确保javascript或其他内容不添加html中不可见的变量。
  • Tripple检查MobNo和textArea是否是唯一需要的参数。通常会检查提交按钮,以查看已执行的操作。
  • 查看您在发帖时获得的输出。它会说出失败的事吗?
  • 尝试直接从您的浏览中发布帖子(有FF插件)以确保您没有因缺少http-referrer而被破坏

我已经做了大量的搜索/假装成浏览器,而且通常非常繁琐。人们添加“安全”检查。常见的是,要求您回发会话变量。

祝你好运!

*编辑:该网站要求您输入有效的+91号码,以便我无法登录并亲自尝试。考虑到该页面上的广告数量,我真的认为他们正在添加某种变量,因为他们靠广告存在而你正试图避免它们。

答案 4 :(得分:1)

您未包含所需的所有POST字段

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

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

答案 5 :(得分:1)

工作脚本:(测试于2012年6月6日下午3:00 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:)

答案 6 :(得分:0)

  1. Way2SMS.com每月 更改隐藏参数' catnamedis'的值
  2. Way2SMS.com 添加新的隐藏参数不那么频繁,就像现在他们添加了一个名为“令牌”的新parmeter,其中因用户而异,与“操作”隐藏参数相同,也取决于用户。
  3. 因此脚本适用于某人,不适用于其他人,因为这些值不断变化,您必须在真实浏览器中手动登录您的way2sms.com帐户并检查元素并找到令牌的值您帐户的操作参数(此值因每个用户而异)。

    这是我的 Python Script ,通过它我可以实现它。 您可以将它用作Perl程序的参考

    注意:在尝试我的脚本之前,根据变量'act'的值 >您的帐户的“操作参数值”,可以使用inspect元素或Firebug找到。

答案 7 :(得分:0)

使用Python的答案here

要使用sms帐户发送way2sms,请使用以下代码段。

在此之前,您需要从here创建API Key

import requests
url = "https://smsapi.engineeringtgr.com/send/"
params = dict(
    Mobile='login username',
    Password='login password',
    Key='generated from above sms api',
    Message='Your message Here',
    To='recipient')

resp = requests.get(url, params)
print(resp, resp.text)

N.B:每天大约有20条短信