Як надіслати запит методом POST без допомоги форми та отримати
Як надіслати запит методом POST без допомоги форми і отримати результат (з мінімальним числом використовуваних модулів)?
Відповіли: 24
а до чого тут AJAX?
Наскільки зрозуміло з питання, людині з бразуера треба відправити дані через POST не використовуючи форму.
наскільки зрозуміло з питання людині треба надіслати запит перлом (інакше навіщо тут питати).
Тоді контр-запитання: як відправити перлом пост-запитчерез форму
навіщо робити через жопу?
advAjax 20/09/2006 23:08
advAjax.post( fieldname: getElementByid('field_id'), . >);
Re: advAjax 20/09/2006 23:17
Аааа ви також використовуєте advAjax? Найневибагливіший, легкий і простий фреймворк!
А якщо з під перла треба щось відправити, то я думаю LWP
Re: advAjax 20/09/2006 23:55
він із юнікодом тільки працює?
use URI::URL; use HTTP::Request; use LWP::UserAgent; use CGI qw(header);
my $query = $uri->query; (my $url = $uri->as_string) =
s/\\?$query$//; my $request = новий HTTP::Request ("POST", $url); $request->header('Content-Type' => 'application/x-www-form-urlencoded'); $request->content($query);
$request->header(Host => $uri->host_port) if $uri->scheme ne 'file';
my $res = LWP::UserAgent->new->request($request);
print header, $res->is_success ? $res->content : $res->status_line;
може, як простіше можна?
простіше це як? не надсилати запит?
не використовуючи трьох модулів – хоча б один
use URI::URL; use HTTP::Request; use LWP::UserAgent;
А чим зумовлений такий аскетизм?
А ви поміряли швидкість, щоб говорити щокілька модулів – це не продуктивно?
Як як. Прочитати стандарт HTTP/1.1, зробити руками запит (збирати з рядків), відкрити сокет. Можна взагалі без модулів обійтися.
приблизно дети так: $params = "fldname1=".$fldval1."&"."fldname2=".$fldval2."&".і т.д. ; $length = strlen($params); $string = "POST /path/to/script.php HTTP/1.0\n". "Content-type: application/x-www-form-urlencoded\n". "Content-length: $length\n". "HOST:$host_where_to_send\n\n". "$params\n";
$fp = @fsockopen("$host_where_to_send", $port, $errno, $errstr, 30); if (!$fp) echo "$errstr ($errno) \n";
@fputs ($ fp, $ string); while (!@feof($fp)) $response .= @fgets($fp, 128); >
@fclose($fp); > echo $response;
Упс, не в те комьюніті :) Хоча в принципі різниця не велика, я цей скрип переписував з Perl на PHP, працює однаково.
Net::HTTP 21/09/2006 08:53
use Net::HTTP; my $s = Net::HTTP->new(Host => "host.com") die $@; $s->write_request(POST => "/page.php", 'User-Agent' => "Mozilla/5.0", "parametr=value"); my($code, $mess, %h) = $s->read_response_headers;
while (1) my $buf; my $n = $s->read_entity_body($buf, 1024); die "read failed: $!" unless defined $n; last unless $n; print $buf; >
Re: Net::HTTP 22/09/2006 22:15
перш, ніж радити пробуйте самі те, що пишіть