2010-07-11 10 views
3

Je n'arrive pas à trouver un bon exemple de comment faire cela correctement, ceux que j'ai trouvés ne fonctionnent pas pour moi .. J'essaie de soumettre un formulaire en utilisant perl mechanize, où le formulaire a un fichier image , la forme est comme ci-dessous, la réalité d'une manière que je suis en train d'accéder à cette API pour un site Web à partir de laquelle j'ai un compte et l'utilisation de POST semble être la meilleure façon d'utiliser leur API:Perl Mécaniser, soumettre un formulaire avec un fichier (image)?

<HTML> 
<BODY> 

<form 
method="post" 
name="image_upload" 
action="http://example-website.com" 
enctype="multipart/form-data"> 
<input type="hidden" name="field1" value=""> 
<input type="text" name="username" value=""> 
<input type="text" name="password" value=""> 
<input type="file" name="pict"> 
<input type="text" name="field2" value="0"> 
<input type="text" name="field3" value="0"> 
<input type="submit" value="Send"> 
</form> 

</BODY> 
</HTML> 

Je essayé cela, mais il ne télécharge pas le fichier image, il semble .. tout conseil est apprécié. (Je suis parti sur les parties du script pour simplifier, mais je suis en mesure de présenter d'autres formes en utilisant cette méthode, mais pas ceux qui nécessitent un téléchargement de fichier)

remplissage de champ de formulaire:
$mech->form_name('image_upload'); 

$mech->set_fields(field1 => '', 
username => $username, 
password => $password, 
pict => '/home/user1/Desktop/pic.jpg', 
field2 => '0', 
field3 => '0' 
); 

#### submit form 
$mech->submit(); 

Répondre

1

Pour le débogage, ajoutez autocheck => 1 à l'objet $mech, il affichera l'erreur et retournera au premier appel infructueux.

En outre, ajouter un print $mech->content après l'appel à $mech->submit,

Vous pourriez recevoir une page d'erreur, auquel cas vous pouvez essayer de configurer l'agent utilisateur:

$mech->agent_alias('Windows IE 6')

Ou, peut-être vous besoin d'obtenir un cookie d'une page antérieure afin de télécharger. (Vous pouvez tester ceci en effaçant les cookies dans votre navigateur et en essayant de télécharger directement à partir de la page de téléchargement)

+0

Je n'ai pas besoin de le déboguer car je connais déjà l'appel infructueux .. c'est l'endroit où j'essaye de télécharger l'image .. c'est plus à propos de ne pas être capable de trouver la syntaxe appropriée pour télécharger une image sous une forme avec mécaniser que toute autre chose – Rick

+0

Il n'y a pas de syntaxe spéciale pour télécharger une image. Le code que vous avez collé semble bien, pourriez-vous préciser ce que signifie «infructueux»? que se passe-t-il après $ mech-> soumettre? – miedwar