6

PerlLWPを使用してWay2smsを介してSMSを送信しようとしています。ログイン部分は成功しています。その後、Cookieをローカルファイルに保存します。ログイン後のウェルカムページには、[ SMSの送信]リンクが表示されます。このリンクをクリックすると、携帯電話番号とSMSテキストの2つの入力と、SMSを送信および送信するためのボタンが表示されます。Firebugは、図に示すようにページ構造を明らかにします。IframeのURLとフォームのaction属性から、フォームアクションの絶対URLを作成し、それに応じてファイルにCookieを保存してフォームを送信しました。ただし、SMSは送信されません。私がここで間違っていることは何ですか?コードは次のとおりです。(name2つのテキスト入力の属性は正しいですが、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

way2sms.comを介してメッセージを送信するためにPerlモジュールNet::SMS :: WAY2SMSを使用してみましたか?それは私にとって素晴らしい働きをします。

インストールするには、次のことを試してください。

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

SMSを送信するためのコードサンプルは次のとおりです。

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

私はあなたのログイン情報を持っていないので、あなたのためにそれをテストすることはできません。

ただし、TamperDataやHttpFoxなどのFirefoxアドオンを使用して、どのURLが投稿され、どのパラメータが送信されるかを取得できます。

Perlを使用してブラウザと同じリクエストを行うと、それは良いことです。

ところで、1つの$ uaを使用して2つのリクエストを送信でき、別のLWP::UserAgentインスタンスを作成する必要はありません。

ありがとう

于 2012-08-26T10:33:14.340 に答える
3

以前のユーザーエージェントを再利用できるため、新しいユーザーエージェントを設定する必要はありません。AFAIK、Cookieはすでにそのユーザーエージェントにあります。

注意:以下はわずかにOTです。

https://metacpan.org/pod/Net::SMS::WAY2SMSを見てみました

それは私のPCにフィンをインストールしました。多分あなたはそれをもう一度やりたいですか?具体的な問題について、ここで新しい質問を開きます。お気軽にご連絡ください。ご覧になる場合がございます。

于 2012-08-26T13:24:25.237 に答える
3

何が悪いのか本当にわかりませんが、これが私が見始めるものです:

  • ブラウザから実際の投稿リクエストを確認してください。javascriptまたは他の何かがhtmlに表示されていない変数を追加していないことを確認してください。
  • MobNoとtextAreaが本当に必要なパラメーターだけであることを3回確認します。たとえば、送信ボタンは、実行されたアクションを確認するためにチェックされることがよくあります。
  • 投稿を行うときにどのような出力が得られるかを確認してください。それは失敗について何かを言いますか?
  • http-referrerの欠如に悩まされていないことを確認するために、ブラウズから直接投稿してみてください(そのためのFFプラグインがあります)。

私はブラウザのふりをして多くのスクレイピングを行いましたが、それはしばしば非常に面倒です。人々は「セキュリティ」チェックを追加します。一般的には、たとえばセッション変数をポストバックする必要があります。

幸運を!

*編集:このサイトでは、登録するために有効な+91番号が必要です。そのため、ログインして自分で試すことはできません。そのページの広告の量を考えると、彼らは広告を生かしていて、あなたはそれらを避けようとしているので、彼らはある種の変数を追加していると私は本当に思います。

于 2012-09-02T12:57:41.320 に答える
1

必要なすべてのPOSTフィールドを含めていません

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

これらすべてを含める必要があります。PHPには、間違いなく機能するこのスクリプトがあり、参照することができます。

于 2012-09-05T09:19:44.603 に答える
1

ワーキングスクリプト: (2012年9月6日午後3時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'の値を毎月1回変更しています。
  2. Way2SMS.comは、ユーザーによって異なる「トークン」と呼ばれる新しいパラメーターを追加したように、新しい非表示パラメーターを追加する頻度を減らしています。これは、ユーザーによっても異なる「アクション」非表示パラメーターと同じです。

したがって、スクリプトは誰かのために機能し、他の人のためには機能しません。この値が変化するため、実際のブラウザでway2sms.comアカウントに手動でログインし、要素を調べて、アカウントのトークンとアクションパラメータの値を見つける必要があります(この値はユーザーごとに異なります)。

これが私のPythonスクリプトであり、それを介してそれを実現することができます。Perlプログラムのリファレンスとして使用できます

注:-スクリプトを試す前に、アカウントのActionパラメーターの値に従って、スクリプト内の変数'act'の値を変更してください。これは、inspect要素または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)

注意:1日あたり約20SMSの制限があります

于 2018-11-12T12:56:46.353 に答える