Як надіслати запит методом 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

перш, ніж радити пробуйте самі те, що пишіть