[SPb-pm] AnyEvent::HTTPD vs POST

Andrey Chernomyrdin chernomyrdin at gmail.com
Tue Jun 17 03:08:36 PDT 2014


Ну с application/x-www-form-urlencoded тут с клиентом нужно что-то
предпринимать, так как справедливо заметил Denis Ibaev <dionys at gmail.com> в
самом коде есть такой кусок:
sub handle_request {
    my ($self, $method, $uri, $hdr, $cont) = @_;

    $self->{keep_alive} = ($hdr->{connection} =~ /keep-alive/io);

    my ($ctype, $bound) = _content_type_boundary ($hdr->{'content-type'});

    if ($ctype eq 'multipart/form-data') {
    $cont = $self->decode_multipart ($cont, $bound);

    } elsif ($ctype =~ /x-www-form-urlencoded/o) {
        $cont = parse_urlencoded ($cont);
    }

    $self->event (request => $method, $uri, $hdr, $cont);
}
То есть если в заголовке есть x-www-form-urlencoded значит фрейморк пытаеся
отпарсить все это, причем если не распарсил - случилась беда, оригинала не
остается, как я понял из кода (нужно проверить т.к. смотрел по-диагонали)


2014-06-17 13:50 GMT+04:00 Ruslan Kuksa <perl-list at spb.csat.ru>:

> Спасибо за ответы.
>
> Это оно самое. При отправке через curl --data-binary, данные печатаются
>
>    print $req->content();
>
> А как быть с application/x-www-form-urlencoded?
> Что надо предпринимать?
>
> 17.06.2014 13:03, Andrey Chernomyrdin пишет:
>
>> Просто content лучше использовать когда передается что-то типа
>> XML/JSON,например если сделать запрос таким образом:
>> curl -s \
>> -H 'Content-Type: text/xml' \
>> -H 'SOAPAction: ""' \
>> --data-binary '<soapenv:Envelope xmlns:soapenv="http://schemas.
>> xmlsoap.org/soap/envelope/" xmlns:api="http://localhost/api">
>> <soapenv:Header/><soapenv:Body><api:getOrganizationsRequest/></
>> soapenv:Body></soapenv:Envelope>' \
>> http://localhost:9090/to-post
>>
>> То в $req->content получишь то, что указанно в --data-binary
>>
>>
>> 2014-06-17 12:51 GMT+04:00 Denis Ibaev <dionys at gmail.com <mailto:
>> dionys at gmail.com>>:
>>
>>
>>     В документации же сказано:
>>
>>     content - Returns the request content or undef if only parameters for
>>     a form were transmitted.
>>
>>     А при Content-Type: application/x-www-form-urlencoded он думает, что
>>     есть параметры. Это видно в
>>     https://metacpan.org/source/ELMEX/AnyEvent-HTTPD-0.93/lib/
>> AnyEvent/HTTPD/HTTPConnection.pm#L302
>>
>>     sub handle_request {
>>     my ($self, $method, $uri, $hdr, $cont) = @_;
>>
>>     $self->{keep_alive} = ($hdr->{connection} =~ /keep-alive/io);
>>
>>     my ($ctype, $bound) = _content_type_boundary ($hdr->{'content-type'});
>>
>>     if ($ctype eq 'multipart/form-data') {
>>     $cont = $self->decode_multipart ($cont, $bound);
>>
>>     } elsif ($ctype =~ /x-www-form-urlencoded/o) {
>>     $cont = parse_urlencoded ($cont);
>>     }
>>
>>     $self->event (request => $method, $uri, $hdr, $cont);
>>     }
>>
>>
>>     17 июня 2014 г., 12:00 пользователь Ruslan Kuksa
>>     <perl-list at spb.csat.ru <mailto:perl-list at spb.csat.ru>> написал:
>>
>>     > задел меня доклад по AnyEvent, решил переписать одну фигню.
>>     > Клиент отправляет данные на сервер методом POST:
>>     >
>>     > POST / HTTP/1.1
>>     > Host: localhost:8080
>>     > Accept: */*
>>     > Content-Length: 1797
>>     > Content-Type: application/x-www-form-urlencoded
>>     > Expect: 100-continue
>>     >
>>     > Как вытащить те самые 1797 байтов данных?
>>     > Чтение документации очень помогло, я узнал что это возможно, но не
>> узнал
>>     > как. (:
>>
>>     --
>>     Денис Ибаев
>>     _______________________________________________
>>     Spb-pm mailing list
>>     Spb-pm at pm.org <mailto:Spb-pm at pm.org>
>>
>>     http://mail.pm.org/mailman/listinfo/spb-pm
>>
>>
>>
>>
>> --
>> With best, Andrey Chernomyrdin
>>
>>
>> _______________________________________________
>> Spb-pm mailing list
>> Spb-pm at pm.org
>> http://mail.pm.org/mailman/listinfo/spb-pm
>>
>
> _______________________________________________
> Spb-pm mailing list
> Spb-pm at pm.org
> http://mail.pm.org/mailman/listinfo/spb-pm
>



-- 
With best, Andrey Chernomyrdin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/spb-pm/attachments/20140617/cdf708c1/attachment.html>


More information about the Spb-pm mailing list