Запрос Perl post на отправку zip-файла как base64?

#perl #lwp

#perl #lwp

Вопрос:

У меня есть скрипт Perl, пытающийся отправить zip-файл подобным образом с помощью модуля LWP UserAgent

 my $req = POST $url, Content_Type => 'form-data',
    Content      => [
        submit => 1,
        upfile =>  [ $fname ]
    ];
  

где $fname — это путь к файлу. Хотя на стороне сервера кажется, что в моем массиве POST есть только «отправить».
Должен ли я в base64 кодировать файл и присваивать его переменной? Каков наилучший способ сделать это?

Комментарии:

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

Ответ №1:

Убедитесь, что имя файла может быть разрешено. Однако, если этого не может быть, вы должны получить сообщение об ошибке. По крайней мере, я делаю в своей версии HTTP::Request::Common .

Вам не нужно кодировать двоичное содержимое как Base64. (Если, конечно, серверное приложение не ожидает такого формата.)

Вот полный пример скрипта:

 use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common 'POST';

my $ua = LWP::UserAgent->new;
my $url = 'http://localhost:8888'; # Fiddler
my $req = POST $url,
    Content_Type => 'form-data',
    Content => [
        submit  => 1,
        upfile  => [ 'C:tempbla.zip' ],
    ];
my $line = '=' x 78 . "n";
print $line, $req->as_string;
my $rsp = $ua->request( $req );
print $line, $rsp->as_string;
  

Комментарии:

1. ах, я вижу, я ожидал, что файл будет отправлен в массиве $ _POST, поэтому, когда я его не увидел, я подумал, что что-то не так, я просто понял, что это в МАССИВЕ $ _FILES, спасибо!