2008-11-19 8 views
0

Je voudrais me connecter à la partie Forums du serveur de la communauté (par exemple http://forums.timesnapper.com/login.aspx?ReturnUrl=/forums/default.aspx), puis télécharger une page spécifique et effectuer une regex (pour voir s'il y a des messages en attente de modération). Si c'est le cas, j'aimerais envoyer un courriel.Connectez-vous par programme sur le forum, puis screenscrape

Je voudrais faire cela à partir d'un serveur Linux.

Actuellement, je sais comment télécharger une page (en utilisant par exemple wget), mais j'ai un problème pour me connecter. Toute idée brillante comment cela fonctionne?

Répondre

1

regardant la source de la page de connexion, il semble être une application asp.net de sorte que vous auriez besoin pour probablement faire quelques choses pour y parvenir -

Gérez le champ __viewstate caché du formulaire et publiez-le lorsque vous soumettez les informations de connexion. Une fois que vous aurez dépassé cela, je suppose que vous pouvez référencer la page spécifique en question en utilisant simplement une URL absolue, mais vous devrez gérer le cookie d'authentification ASP.NET Forms et l'envoyer dans le cadre de la requête GET.

+0

Ouais, c'est plus comme je l'ai eu à l'esprit ... mais il semble que l'un des principaux tracas! – AtliB

1

Personnellement, je l'écris en Perl, en utilisant WWW::Mechanize, et faire quelque chose comme:


my $login_url = 'login url here'; 
my $username = 'username'; 
my $password = 'password'; 
my $mech = new WWW::Mechanize; 
$mech->get($login_url) 
    or die "Failed to fetch login page"; 
$mech->set_visible($username, $password) 
    or die "Failed to find fields to complete"; 
$mech->submit 
    or die "Failed to submit form"; 

if ($mech->content() =~ /posts awaiting moderation/i) { 
    # Do something here 
} 

Je ne sais pas si le fonctionnera ci-dessus, je n'ai pas les détails de connexion à un Community Server (quel qu'il soit) pour le tester, mais il devrait vous donner quelque chose que vous pourriez travailler assez facilement, et montre la puissance de WWW :: Mechanize.

0

Vous pouvez tout faire avec wget. Vous devez soumettre un formulaire en utilisant POST et devez stocker des cookies. pertinentes de la substance page man wget:

--post-data=string 
--post-file=file 

Use POST as the method for all HTTP requests and send the specified data in the request body. 
"--post-data" sends string as data, whereas "--post-file" sends the contents of file. Other than 
that, they work in exactly the same way. 

This example shows how to log to a server using POST and then proceed to download the desired pages, 
presumably only accessible to authorized users: 

     # Log in to the server. This can be done only once. 
     wget --save-cookies cookies.txt \ 
      --post-data 'user=foo&password=bar' \ 
      http://server.com/auth.php 

     # Now grab the page or pages we care about. 
     wget --load-cookies cookies.txt \ 
      -p http://server.com/interesting/article.php 
Questions connexes