6

我正在尝试使用 Perl LWP 通过 Way2sms 发送短信。登录部分成功,之后我将 cookie 保存到本地文件。登录后的欢迎页面显示一个发送短信链接,单击哪个链接将重定向到另一个页面,其中包含手机号码和短信文本的两个输入以及一个用于提交和发送短信的按钮。Firebug 显示了如图所示的页面结构。根据 Iframe url 和表单的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']);

在此处输入图像描述

4

8 回答 8

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]);
于 2012-08-26T14:42:54.337 回答
3

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

请注意:以下略OT。

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

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

于 2012-08-26T13:24:25.237 回答
3

真的看不出有什么问题,但这里是我开始看的东西:

  • 从浏览器检查您的真实发布请求。确保 javascript 或其他东西没有添加在 html 中不可见的变量。
  • 三重检查 MobNo 和 textArea 确实是唯一需要的参数。例如,通常会检查提交按钮,以查看执行了哪些操作。
  • 看看你在发帖时得到了什么输出。它是否说明了失败?
  • 尝试直接从您的浏览器中发布帖子(有 FF 插件),以确保您不会因缺少 http-referrer 而失败

我做了很多抓取/伪装成浏览器的工作,而且通常非常乏味。人们添加“安全”检查。共同点是要求您例如回发会话变量。

祝你好运!

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

于 2012-09-02T12:57:41.320 回答
3

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

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

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

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

谢谢

于 2012-08-26T10:33:14.340 回答
1

您没有包括所有必需的 POST 字段

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

这些都需要包括在内。PHP中有这个脚本绝对有效,您可以参考。

于 2012-09-05T09:19:44.603 回答
1

工作脚本:(测试于 2012 年 9 月 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";
     }

PS我希望我能得到过期的赏金O_o :)

于 2012-09-05T12:31:14.440 回答
0

出色地

  1. Way2SMS.com 每月更改一次隐藏参数“ catnamedis”的值
  2. Way2SMS.com不那么频繁地添加新的隐藏参数,就像现在他们添加了名为“ token ”的新参数,该参数因用户而异,与“ Action ”隐藏参数相同,该参数也因用户而异。

因此,脚本适用于某人,不适用于其他人,因为这种变化的值,您必须在真实浏览器中手动登录到您的 way2sms.com 帐户并检查元素并找到您帐户的 Token 和 Action 参数的值(此值因每个用户而异)。

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

注意:-在尝试我的脚本之前,根据您帐户的 Action 参数值更改脚本中变量“act”的值,您可以使用检查元素或 Firebug 找到该值。

于 2013-01-12T18:01:18.747 回答
0

此处使用 Python的答案

sms使用way2sms帐户发送,您可以使用以下代码段。

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

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)

注意:每天限制为约 20 条短信

于 2018-11-12T12:56:46.353 回答