Perl Mechanize, отправка формы с файлом (изображением)? - PullRequest
3 голосов
/ 11 июля 2010

Я не могу найти хороший пример того, как сделать это правильно, те, что я нашел, не работают для меня .. Я пытаюсь отправить форму с использованием Perl Mechanize, где форма имеет изображение файл, форма, как показано ниже, это на самом деле способ, которым я пытаюсь получить доступ к этому API для веб-сайта, с которого у меня есть учетная запись, и использование POST, кажется, самый простой способ использовать их API:

<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>

Я пробовал это, но это не загрузка файла изображения, кажется .. любой совет приветствуется. (Я упустил части скрипта для простоты, но я могу отправить другие формы, используя этот метод, но не те, которые требуют загрузки файла)

заполните поле формы:
$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();

1 Ответ

1 голос
/ 11 июля 2010

Для отладки добавьте autocheck => 1 к объекту $mech, он напечатает ошибку и вернется при самом раннем неудачном вызове.

Также добавьте print $mech->content после вызова $mech->submit,

Возможно, вы получаете страницу с ошибкой, в этом случае вы можете попытаться установить пользовательский агент:

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

Или, возможно, вам нужно получить cookie отболее ранняя страница для загрузки.(вы можете проверить это, очистив куки в вашем браузере и попытавшись загрузить их прямо со страницы загрузки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...