Perl HTTP-запрос «запомни и забудь» - PullRequest
0 голосов
/ 08 марта 2020

Это , а не , то же самое, что фоновый / асинхронный HTTP-запрос.

Есть ли способ запустить HTTP-запрос PUT и не ждать ответа или определения успеха / неудачи?

Моя кодовая база однопотоковая и однопроцессная.

Я открыт для патча LWP :: UserAgent-> запроса при необходимости.

Ответы [ 2 ]

3 голосов
/ 08 марта 2020

Вы можете просто отказаться от обработки ответа при поступлении первых данных:

use LWP::UserAgent;

my $ua = LWP::UserAgent->new;
my $resp = $ua->put('http://example.com/', ':content_cb' => sub { die "break early" });
print $resp->as_string;

Вы также можете создать запрос с помощью HTTP::Request-new('PUT',...)->as_string, создать сокет с IO::Socket::IP->new(...) или (для https) IO::Socket::SSL->new(...) и отправьте этот запрос через сокет - затем оставьте сокет открытым некоторое время, пока выполняете другие действия в вашей программе.

Но первый подход с ранним перерывом в :content_cb, вероятно, проще. И вопреки тому, что вы сами создаете и отправляете запрос, это гарантирует, что сервер хотя бы начал обрабатывать ваш запрос, поскольку начал отправлять ответ обратно.

1 голос
/ 09 марта 2020

Если вы открыты для альтернатив LWP, Mojo :: UserAgent - это неблокирующий пользовательский агент, который позволяет вам контролировать, как ответ обрабатывается событием l oop при использовании таким образом. , Например, как описано в кулинарной книге, вы можете изменить обработку потока ответов . Это можно использовать, чтобы просто игнорировать поток или сделать что-то еще.

...