WWW::Curl не может прикрепить данные WWW::Curl::Form в теле POST

Кто-нибудь знает, почему следующий код не отправляет данные POST из объекта WWW::Curl::Form в теле запроса?

    #!/usr/bin/perl
    use strict;
    use warnings;
    use WWW::Curl::Easy;
    use WWW::Curl::Form;

    my $curl = new WWW::Curl::Easy();
    $curl->setopt(CURLOPT_VERBOSE, 1);
    $curl->setopt(CURLOPT_NOSIGNAL, 1);
    $curl->setopt(CURLOPT_HEADER, 1);
    $curl->setopt(CURLOPT_TIMEOUT, 10);
    $curl->setopt(CURLOPT_URL, 'http://localhost/post_test.php');

    my $curlf = new WWW::Curl::Form();
    $curlf->formadd('a','b');
    $curlf->formadd('c','d');
    $curlf->formadd('e','f');
    $curlf->formadd('g','h');
    $curlf->formadd('i','j');
    $curl->setopt(CURLOPT_HTTPPOST, $curlf);

    my $resp = '';
    open(my $resp_fh, ">", \$resp);
    $curl->setopt(CURLOPT_WRITEDATA, $resp_fh);

    my $retcode = $curl->perform();
    die($retcode) if ($retcode != 0);

    print $resp;

Это запрос POST, который я вижу (как в подробном выводе, так и через Wireshark):

    POST /post_test.php HTTP/1.1
    Host: localhost
    Accept: */*
    Content-Length: 0

Как видите, Content-Type отсутствует, Content-Length равен 0, а в теле нет данных.

Это в Debian с использованием libcurl3 7.21.0-2 и libwww-curl-perl 4.12-1.


person Steve    schedule 06.09.2011    source источник
comment
Пример postit2.c отлично работает при отправке данных multipart/form-data. С библиотекой все в порядке, возможно проблема в обертке WWW::Curl.   -  person Steve    schedule 06.09.2011


Ответы (1)


Попробуйте использовать другую оболочку, Net::Curl:

#!/usr/bin/perl
use strict;
use warnings;
use Net::Curl::Easy qw(:constants);
use Net::Curl::Form qw(:constants);

my $curl = new Net::Curl::Easy();
$curl->setopt(CURLOPT_VERBOSE, 1);
$curl->setopt(CURLOPT_NOSIGNAL, 1);
$curl->setopt(CURLOPT_HEADER, 1);
$curl->setopt(CURLOPT_TIMEOUT, 10);
$curl->setopt(CURLOPT_URL, 'http://localhost/post_test.php');

my $curlf = new Net::Curl::Form();
$curlf->add(CURLFORM_COPYNAME ,=> 'a', CURLFORM_COPYCONTENTS ,=> 'b');
$curlf->add(CURLFORM_COPYNAME ,=> 'c', CURLFORM_COPYCONTENTS ,=> 'd');
$curlf->add(CURLFORM_COPYNAME ,=> 'e', CURLFORM_COPYCONTENTS ,=> 'f');
$curlf->add(CURLFORM_COPYNAME ,=> 'g', CURLFORM_COPYCONTENTS ,=> 'h');
$curlf->add(CURLFORM_COPYNAME ,=> 'i', CURLFORM_COPYCONTENTS ,=> 'j');
$curl->setopt(CURLOPT_HTTPPOST, $curlf);

my $resp = '';
open(my $resp_fh, ">", \$resp);
$curl->setopt(CURLOPT_WRITEDATA, $resp_fh);

my $retcode = $curl->perform();
die($retcode) if ($retcode != 0);

print $resp;
person creaktive    schedule 12.11.2012