2010-08-01 4 views
4

J'essaie d'utiliser Java pour soumettre un captcha à decaptcher.com. Decaptcher ne fait pas vraiment un bon travail d'expliquer comment utiliser leur API, donc j'essaie de comprendre comment utiliser une requête HTTP POST pour soumettre un captcha. Voici le code exemple, je suis arrivé de leur site web:Comment envoyer une image dans le cadre d'une requête POST en plusieurs parties - Java HtmlUnit

<form 
method="post" 
action="http://poster.decaptcher.com/" 
enctype="multipart/form-data"> 
<input type="hidden" name="function" value="picture2"> 
<input type="text" name="username" value="client"> 
<input type="text" name="password" value="qwerty"> 
<input type="file" name="pict"> 
<input type="text" name="pict_to" value="0"> 
<input type="text" name="pict_type" value="0"> 
<input type="submit" value="Send"> 
</form> 

Je suis censé envoyer une demande de poste comme celui sur le serveur Web et obtenir une chaîne me revint. Voici ma tentative de l'implémenter en Java. Est-ce que je suis supposé définir la valeur de pict sur un objet File au lieu de la chaîne pointant vers où le captcha est stocké? (captcha.png est le nom de l'image que j'essaie de soumettre).

Répondre

1

Vous ne devez pas utiliser un NameValuePair pour cela mais pour sa sous-classe, KeyDataPair. De cette façon, vous pouvez spécifier un fichier à télécharger.

Ce qui suit devrait fonctionner:

new KeyDataPair("pict", new File(fileName), "image/png", "utf-8"); 

Le paramètre de type de contenu est le du fichier de type MIME. Puisque vous téléchargez un fichier PNG, il devrait être image/png.

+0

Est-ce que je déclare la KeyValuePair comme: – Dylan

+0

// Pretend créer un objet fichier de "captcha.png" appelé fichier nouvelle KeyValuePair ("PICT", fichier ".png", "utf-8") Les fichiers PNG sont-ils encodés en UTF-8? – Dylan

+0

J'ai ajouté un exemple que je pense devrait fonctionner. Je ne suis pas sûr du jeu de caractères utf-8, peut-être que vous devriez expérimenter un peu avec ça. –

0

Voici ce que je tentais de taper:

File file = new File("captcha.png"); 
params.add(new KeyDataPair("pict", capFile, "png", "utf-8")); 

sont des fichiers PNG encodée avec UTF-8? Est-ce ainsi que je spécifierais le KeyDataPair pour l'entrée de fichier? Je pense que je spécifie le mauvais contentType ou le mauvais charSet, ou les deux. Suis-je censé les mettre en majuscules?

+2

Cela ne devrait pas être une réponse distincte. Cela devrait être ajouté à votre question originale en tant que EDIT. –

3

Il existe un mécanisme de niveau supérieur pour envoyer ce fichier, vous n'avez pas besoin de créer WebRequestSettings et de définir ses valeurs individuelles.

Vous devriez héberger ce fichier HTML statique quelque part et faire quelque chose comme le suivant.

Si vous avez toujours un problème, veuillez soumettre un rapport de bug dans HtmlUnit bug tracker.

BTW, HtmlUnit 2.8 est sur le point d'être publié, essayez-le.

WebClient webClient = new WebClient(); 
HtmlPage page = webClient.getPage("http://some_host/test.html"); 
HtmlForm form = page.getForms().get(0); 
form.getInputByName("username").setValueAttribute(username); 
form.getInputByName("password").setValueAttribute(password); 
form.getInputByName("pict_to").setValueAttribute("0"); 
form.getInputByName("pict_type").setValueAttribute("0"); 
form.getInputByName("pict").setValueAttribute("full_path_to_captcha_png"); 
form.<HtmlFileInput>getInputByName("pict").setContentType("image/png");//optional 
HtmlPage page2 = form.getInputByValue("Send").click(); 
+0

Etes-vous sûr que cela fonctionnera pour une demande POST? – Dylan

+1

Oui, HtmlUnit est destiné à vous prendre le mal de tête :), s'il vous plaît tester avec 2.8 –

Questions connexes