2010-08-05 10 views
1

Je rencontre des problèmes pour télécharger un fichier mp4 à l'aide de WWW :: Mechanize. Un navigateur normal, comme Firefox, peut faire la récupération de fichiers sans problème avec ou sans Javascript activé. Donc il me semble que Javascript, le suspect habituel, n'a pas vraiment joué de rôle dans mon problème. J'ai également ajouté dans mon script les mêmes en-têtes que ceux envoyés par Firefox au serveur de fichiers lors de l'extraction afin que le serveur puisse voir Mechanize comme un navigateur normal, mais le problème persiste. Et Win32 :: IE :: Mechanize peut aussi bien faire le travail mais pourquoi Mechanize ne peut pas?Pourquoi une erreur Internal Server se produit-elle lors de l'utilisation de Mechanize pour récupérer les fichiers?

Des idées? Merci d'avance :)

Voici un mon script:

use strict; 
use warnings; 
use WWW::Mechanize; 


my $browser = WWW::Mechanize->new(); 
$browser->cookie_jar(HTTP::Cookies->new()); 
$browser->add_header('User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.11) Gecko/20100701 Firefox/3.5.11'); 
$browser->add_header('Accept' => 'text/xml,application/xml,application/xhtml+xml;q=0.9,*/*;q=0.8'); 
$browser->add_header('Accept-Language' => 'zh-cn,zh;q=0.5'); 
$browser->add_header('Accept-Encoding' => 'gzip,deflate'); 
$browser->add_header('Accept-Charset' => 'GB2312,utf-8;q=0.7,*;q=0.7'); 
$browser->add_header('Keep-Alive' => 300); 
$browser->add_header('Connection' => 'keep-alive'); 

my $url = 'http://119.167.217.206:19765/ppvaplaybyopen?url=http://119.167.217.206/%d3%e9%c0%d6%b0%d9%b7%d6%b0%d9-100803-%d0%a1%d6%ed%bd%dc%c2%d7%b7%d6%d7%e9%d0%e3%c7%f2%bc%bc.mp4/segno=0%26&rid=A8F1F5DFEB1B11F1D90B40AD1BB75D69&filelength=21293994&blocksize=2097152&blocknum=11&blockmd5=E210862B3F92935D0883E00AA2A38F0[email protected]@[email protected][email protected]@[email protected][email protected]@[email protected][email protected]'; 

$browser->get($url); 

Je reçois le message d'erreur suivant:

Error GETing http://119.167.217.206:19765/ppvaplaybyopen?url=http://119.167.217.206/%d3%e9%c0%d6%b0%d9%b7%d6%b0%d9-100803-%d0%a1%d6%ed%bd%dc%c2%d7%b7%d6%d7%e9%d 
0%e3%c7%f2%bc%bc.mp4/segno=0%26&rid=A8F1F5DFEB1B11F1D90B40AD1BB75D69&filelength=21293994&blocksize=2097152&blocknum=11&blockmd5=E210862B3F92935D0883E00AA2A38F08 
@[email protected][email protected]@[email protected] 
[email protected]@[email protected][email protected]@9D93A9BE1D2EDE216AA9EB 
F26BF414BE: Internal Server Error at E:\pp2.pl line 17 

Répondre

1

je suis même "Internal Server Error" quand je vais à même URL Causes possibles:

  1. Vous n'avez pas défini de référence correctement.

  2. Vous avez une certaine authentification, que vous faites dans le navigateur, ou toute autre donnée stockée dans un cookie.

En général, l'ouverture d'URL dans un autre navigateur est un bon moyen de vérifier de telles choses. L'extension Firefox "Live http headers" est un bon moyen de vérifier de telles choses.

+0

merci pour les pointeurs. J'ai utilisé Live HTTP Headers pour enregistrer les en-têtes envoyés au serveur, puis ajouté ces têtes dans mon script. J'ai également essayé de supprimer tous les cookies et ensuite en ouvrant l'URL dans IE, la boîte de dialogue de sauvegarde de fichier apparaîtrait comme prévu. Maintenant, comme vous l'avez suggéré, j'ai aussi essayé d'ajouter un referer dans mon script, mais pas de chance. Eh bien, je me demandais si ce n'était pas Javascript, en-têtes, et les cookies, quoi d'autre pourrait être la cause du problème. – Mike

0

une autre possibilité l'erreur "Internal Server Error" est votre connexion a été réinitialisée