2012-11-18 9 views
1

WWW :: Mechanize perl 모듈을 사용하여 스팀 인증이 필요한 웹 사이트에 로그인하려고했습니다. 지금까지 로그인 페이지로 성공적으로 가져 왔지만 양식을 제출하면 전혀 작동하지 않는 것 같습니다. 양식이 제출되면 페이지의 내용은 로그인에 실패한 것처럼 변경되지 않으며 다시 시도하길 원합니다. 나는 지금 몇 시간 동안 검색을 해왔고 양식 상자를 설정하고 텍스트를 제출하는 여러 가지 조합을 시도했지만 아무 것도 작동하지 않습니다. 어떤 이유로 나는 Mechanize가 로그인이 작동하는지 여부를 확인할 수 있는지 확인하지 못했습니다. 내 검색어가 좋지 않을 수도 있습니다.웹 사이트에 로그인 다른 웹 사이트 요청하기

여기까지 내가 지금까지 얻은 코드가 있습니다. 이 작업을 수행하려면 tf2wh의 로그인 양식으로 이동하여 Steam 로그인 페이지로 리디렉션하고 사용자/패스를 입력 한 다음 버튼을 클릭 한 다음 쿠키에 저장된 로그인 세션으로 tf2wh로 돌아갑니다. 그러나 작동하는 유일한 부분은 초기 로그인 리디렉션입니다.

#!/usr/bin/perl 
use strict; 
use warnings; 
use WWW::Mechanize; 

my $user = "my_username"; 
my $pass = "my_password"; 
my $uri = 'http://www.tf2wh.com/?login'; 
my $cookies = 'cookies.txt'; 
my $agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'; 

my $mechanize = WWW::Mechanize->new(
    agent => $agent, 
    cookie_jar => {}, 
    autosave => 1, 
    ignore_discard => 1); 

$mechanize->add_header(
    "Connection" => "keep-alive", 
    "Keep-Alive" => "115"); 

$mechanize->get($uri); 

$mechanize->success or die "Could not fetch login page.\n"; 

#One of many different forms I've tried 
$mechanize->form_name('login'); 
$mechanize->set_visible($user, $pass); 
$mechanize->click(); 
$mechanize->follow_link(); 

$mechanize->success or die 'Could not login.'; 

print "Logged in successfully! Trying to look at TF2WH now.\n"; 

#Test to see if we get the "You need to login" message 
$mechanize->get('http://www.tf2wh.com/item.php?id=6011;6;78e2c5962db56a60f7c143a12875f3b6'); 

print "Fetched\n"; 

if($mechanize->text() =~ m{Handy Hint:}) 
{ 
    print "Failed to login.\n"; 
} 
else 
{ 
    print "Up and running!"; 
} 
+0

Wireshark를 사용하여 Steam이 보낸 요청과 자신의 요청을 비교하는 것이 좋습니다. – mzedeler

답변

0

일부 증기 헤더를 전파해야 할 수도 있습니다.

싱글 사인온 솔루션은 모두 단점으로 가득합니다.

"게임"에서 자신의 authn/authz 시스템을 사용하는 방법을 설명하는 개발자 가이드가 필요할지 모르겠다.

당신이 불행하다면, 그들은 모두 그것을 바이너리 객체로 묶었습니다. 운이 좋으면 로그인 정보를 전파하는 방법과 방법을 정확히 알려줍니다.

+0

나는 이것에 대해 조사해야 할 것이지만 지금까지는별로 좋아 보이지 않는다. 나는 단순한 페이지 스크레이퍼에 대한 여러 가지 해킹 해결 방법을 생각해 내야한다. 그래도 정보를 가져 주셔서 감사합니다. – ozdrgnaDiies

+0

LWP/Mech 기반 스크린 스크래퍼를 쓰고있을 때, 제 경험에 비추어 볼 때 hacky workarounds는 영역의 일부입니다. 기본 가정은 누군가 페이지를 업데이트 할 때까지만 유지됩니다. 예전에는 페이지가 자주 업데이트되지 않았습니다. 비즈니스 관리자가 웹에서해야 할 일이 전혀 없었기 때문입니다. 그러나 당신이 그 프로그램의 유지 보수를 "새로운 사람"에게 넘겨 준 후 일주일에 그것을 바꿀 수있을 것입니다. 누가 완전히 새로운 것을 알았지 만, 지난 두 주 동안 페이지의 모든 뉘앙스를 알아 내지 못했습니다. 긁기. :-) –