기존 스크립트에서 LWP :: UserAgent 또는 WWW :: Mechanize를 사용하여 Perl에서 복제하려고하는 코드가 있습니다.Perl에서 Nest Thermostat 사이트의 POST 웹 인증 (Ruby 변환 시도)
original script은 실제로 내가 원하는 것 이상을 수행합니다. 나는 Nest 웹 사이트 (도움이 필요한 부분)에 로그인하고 역사적인 로깅을위한 일부 데이터를 분석하고 싶습니다. (저는 잘했습니다).
내 현재 스크립트는 작동 할 것으로 예상되지만, Ruby 예제의 authResult/access_token
이 실제로 Perl 모듈에서 이해하고 사용했는지 확실하지 않습니다.
펄에 내 코드 :
#!/usr/bin/perl
use WWW::Mechanize;
#use HTTP::Request::Common qw(POST);
use HTTP::Cookies;
use LWP::UserAgent;
use Data::Dumper;
use CGI;
my $email; #stores our mail
my $password; #stores our password
my $user_agent = 'Nest/1.1.0.10 CFNetwork/548.0.4';
$email = "[email protected]";
$password = "mypassword";
my @headers = (
'User-Agent' => 'Nest/1.1.0.10 CFNetwork/548.0.4',
'X-nl-user-id' => $email,
'X-nl-protocol-version' => '1',
'Accept-Language' => 'en-us',
'Connection' => 'keep-alive',
'Accept' => '*/*'
);
# print "Content-type: text/html\n\n";
my $cookie = HTTP::Cookies->new(file => 'cookie',autosave => 1,);
my $browser = WWW::Mechanize->new(cookie_jar => $cookie, autocheck => 1,);
# tell it to get the main page
$browser->get("https://home.nest.com/user/login");
print Dumper($browser->forms);
# okay, fill in the box with the name of the
# module we want to look up
$browser->form_number(1);
$browser->field("username", $email);
$browser->field("password", $password);
$browser->submit();
print $browser->content();
내가 양식을 제출하면, 난 그냥 같은 페이지가 나에게 다시 돌려 받고, 나는 정확히 둥지 내가 '무엇을 좋아하지 않는 원인을 모르는 제출. 형태로 두 개의 추가 필드는에 있습니다 로그인 페이지 :
'inputs' => [
bless({
'maxlength' => '75',
'/' => '/',
'value_name' => 'E-mail address',
'name' => 'username',
'id' => 'id_username',
'type' => 'text'
}, 'HTML::Form::TextInput'),
bless({
'/' => '/',
'value_name' => 'Password',
'name' => 'password',
'id' => 'id_password',
'type' => 'password',
'minlength' => '6'
}, 'HTML::Form::TextInput'),
bless({
'readonly' => 1,
'/' => '/',
'value_name' => '',
'value' => '',
'name' => 'next',
'type' => 'hidden'
}, 'HTML::Form::TextInput'),
bless({
'readonly' => 1,
'/' => '/',
'value_name' => '',
'value' => 'dbbadca7910c5290a13d30785ac7fb79',
'name' => 'csrfmiddlewaretoken',
'type' => 'hidden'
}, 'HTML::Form::TextInput')
내가 각 제출에 csrfmiddlewaretoken
값을 사용해야합니까? 그것은 변화하는 것처럼 보입니다. 나는 성공적인 로그인시 쿠키를 얻는 것으로 충분하다고 생각했습니다.
내가 잘못하고있는 것에 대한 제안 사항이 있으십니까? 파란색에서
사이트가 실제로 사용자 지정 클라이언트를 고집하지 않으면이 작은 코드가 작동해야합니다.'use WWW :: Mechanize qw(); 내 $ w = WWW :: Mechanize-> new; $ w-> get ('https://home.nest.com/accounts/login/'); $ w-> submit_form (with_fields => {username => 'theusername @ example', password => 'thepassword'}); '계정이 없으므로 테스트 할 수 없습니다. - 실패하면 Wireshark를 사용하여 Mechanize에서 성공한 HTTP 트랜잭션과 실패한 트랜잭션을 기록하고 비교하여 정확한 차이점을 찾습니다. 아마도 Ruby에서 번역 할 수있는 사람을 기다리는 것이 더 빠를 것입니다. – daxim