我正在尝试使用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']);
答案 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)
无法真正看出错误,但以下是我开始关注的事情:
我已经做了大量的搜索/假装成浏览器,而且通常非常繁琐。人们添加“安全”检查。常见的是,要求您回发会话变量。
祝你好运!*编辑:该网站要求您输入有效的+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)
好
因此脚本适用于某人,不适用于其他人,因为这些值不断变化,您必须在真实浏览器中手动登录您的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条短信