Почему мой WWW :: Mechanize не отправляет форму PayPal? - PullRequest
0 голосов
/ 29 сентября 2010

Ничто из того, что я пробовал, не может заставить мой код правильно отправляться Может кто-нибудь еще понять это?

#!/usr/bin/perl

use WWW::Mechanize;


my $user = 'cowsaremyfriends@gmail.com';
my $pass  = 'hackswipe';
# Test account; don't worry


my $browser = WWW::Mechanize->new();
$browser->get("https://www.paypal.com/");
$browser->form_with_fields("login_email", "login_password");
$browser->field("login_email", $user);
$browser->field("login_password", $pass);
$browser->submit_form();
$browser->get("https://www.paypal.com/us/cgi-bin/webscr?cmd=_profile-api-add-direct-access");
##### Help here ---> Trying to submit form with default option selected #####
my $html = $browser->content;

print $html;

Ответы [ 2 ]

6 голосов
/ 29 сентября 2010

Это работает для меня, но когда дело доходит до отладки веб-скребков и т. Д., Вы должны следить за транзакцией HTTP.Это действительно легко добавить, поскольку WWW :: Mechanize является подклассом LWP :: UserAgent :

use WWW::Mechanize;

my $browser = WWW::Mechanize->new();

# See LWP::Debug
$browser->add_handler("request_send",  sub { shift->dump; return });
$browser->add_handler("response_done", sub { shift->dump; return });

Теперь вы можете видеть, что вы отправляете и что отправляет PayPalназад.

Зачастую вы также можете использовать различные инструменты HTTP-сниффинга, но они работают только с вещами, которые вы отправляете в незашифрованном виде, поэтому вам не повезло.

В этом случае, однако,PayPal на вас.Они знают, что вы используете сценарий.Часть результатов, которые я получаю:

<h2>Request API Credentials</h2>
</div>
<div id="messageBox"></div>
<div id="main"><div class="layout1"><form action="https://www.paypal.com/us/cgi-bin/webscr?dispatch=5885d80a13c0db1f8e263663d3faee8dc18bca4c6f47e633b393e284a5f8a8f8" class="">
<input type="hidden" name="cmd" value="_profile-api-add-direct-access"><input type="hidden" name="api_flow_origin" value=""><input type="hidden" name="show_switch" value="1"><input type="hidden" name="auth_type" value="ssl"><input type="hidden" name="api_username" value=""><input type="hidden" name="program_name" value=""><input type="hidden" name="program_id" value=""><input type="hidden" name="partner_name" value=""><input type="hidden" name="partner_id" value=""><input type="hidden" name="partner_code" value=""><p>API credentials consist of three elements:</p>
<ul>
<li>An API username</li>
<li>An API password</li>
<li>Either an API signature or an API SSL client-side certificate</li>
</ul>
<p>If you’re using a shopping cart or solution provider, ask whether you need an API signature or a certificate.</p>

Если вы хотите взаимодействовать с PayPal через программу, вам нужно зарегистрироваться для доступа разработчика .

0 голосов
/ 29 сентября 2010

Мы точно не знаем, в чем проблема.Вы читали часто задаваемые вопросы?

perldoc WWW::Mechanize::FAQ

Это дает советы о том, как отладить проблемы с мехом.Первое, что мне нужно спросить, это если форма использует JavaScript.Я бы поставил на никель, что страницы PayPal делают это.

...