ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-HTTP/HTTP.pm
(Generate patch)

Comparing AnyEvent-HTTP/HTTP.pm (file contents):
Revision 1.134 by root, Fri Sep 7 22:11:31 2018 UTC vs.
Revision 1.139 by root, Fri Aug 5 20:48:14 2022 UTC

46use AnyEvent::Util (); 46use AnyEvent::Util ();
47use AnyEvent::Handle (); 47use AnyEvent::Handle ();
48 48
49use base Exporter::; 49use base Exporter::;
50 50
51our $VERSION = 2.24; 51our $VERSION = 2.25;
52 52
53our @EXPORT = qw(http_get http_post http_head http_request); 53our @EXPORT = qw(http_get http_post http_head http_request);
54 54
55our $USERAGENT = "Mozilla/5.0 (compatible; U; AnyEvent-HTTP/$VERSION; +http://software.schmorp.de/pkg/AnyEvent)"; 55our $USERAGENT = "Mozilla/5.0 (compatible; U; AnyEvent-HTTP/$VERSION; +http://software.schmorp.de/pkg/AnyEvent)";
56our $MAX_RECURSE = 10; 56our $MAX_RECURSE = 10;
198C<AnyEvent::HTTP::set_proxy>). 198C<AnyEvent::HTTP::set_proxy>).
199 199
200Currently, if your proxy requires authorization, you have to specify an 200Currently, if your proxy requires authorization, you have to specify an
201appropriate "Proxy-Authorization" header in every request. 201appropriate "Proxy-Authorization" header in every request.
202 202
203Note that this module will prefer an existing persistent connection,
204even if that connection was made using another proxy. If you need to
205ensure that a new connection is made in this case, you can either force
206C<persistent> to false or e.g. use the proxy address in your C<sessionid>.
207
203=item body => $string 208=item body => $string
204 209
205The request body, usually empty. Will be sent as-is (future versions of 210The request body, usually empty. Will be sent as-is (future versions of
206this module might offer more options). 211this module might offer more options).
207 212
239The default for this option is C<low>, which could be interpreted as "give 244The default for this option is C<low>, which could be interpreted as "give
240me the page, no matter what". 245me the page, no matter what".
241 246
242See also the C<sessionid> parameter. 247See also the C<sessionid> parameter.
243 248
244=item session => $string 249=item sessionid => $string
245 250
246The module might reuse connections to the same host internally. Sometimes 251The module might reuse connections to the same host internally (regardless
247(e.g. when using TLS), you do not want to reuse connections from other 252of other settings, such as C<tcp_connect> or C<proxy>). Sometimes (e.g.
253when using TLS or a specfic proxy), you do not want to reuse connections
248sessions. This can be achieved by setting this parameter to some unique 254from other sessions. This can be achieved by setting this parameter to
249ID (such as the address of an object storing your state data, or the TLS 255some unique ID (such as the address of an object storing your state data
250context) - only connections using the same unique ID will be reused. 256or the TLS context, or the proxy IP) - only connections using the same
257unique ID will be reused.
251 258
252=item on_prepare => $callback->($fh) 259=item on_prepare => $callback->($fh)
253 260
254In rare cases you need to "tune" the socket before it is used to 261In rare cases you need to "tune" the socket before it is used to
255connect (for example, to bind it on a given IP address). This parameter 262connect (for example, to bind it on a given IP address). This parameter
265to do this, but you can provide your own C<tcp_connect> function - 272to do this, but you can provide your own C<tcp_connect> function -
266obviously, it has to follow the same calling conventions, except that it 273obviously, it has to follow the same calling conventions, except that it
267may always return a connection guard object. 274may always return a connection guard object.
268 275
269The connections made by this hook will be treated as equivalent to 276The connections made by this hook will be treated as equivalent to
270connecitons made the built-in way, specifically, they will be put into 277connections made the built-in way, specifically, they will be put into
271and taken from the persistent conneciton cache. If your C<$tcp_connect> 278and taken from the persistent connection cache. If your C<$tcp_connect>
272function is incompatible with this kind of re-use, consider switching off 279function is incompatible with this kind of re-use, consider switching off
273C<persistent> connections and/or providing a C<session> identifier. 280C<persistent> connections and/or providing a C<sessionid> identifier.
274 281
275There are probably lots of weird uses for this function, starting from 282There are probably lots of weird uses for this function, starting from
276tracing the hosts C<http_request> actually tries to connect, to (inexact 283tracing the hosts C<http_request> actually tries to connect, to (inexact
277but fast) host => IP address caching or even socks protocol support. 284but fast) host => IP address caching or even socks protocol support.
278 285
349 356
350Try to create/reuse a persistent connection. When this flag is set 357Try to create/reuse a persistent connection. When this flag is set
351(default: true for idempotent requests, false for all others), then 358(default: true for idempotent requests, false for all others), then
352C<http_request> tries to re-use an existing (previously-created) 359C<http_request> tries to re-use an existing (previously-created)
353persistent connection to same host (i.e. identical URL scheme, hostname, 360persistent connection to same host (i.e. identical URL scheme, hostname,
354port and session) and, failing that, tries to create a new one. 361port and sessionid) and, failing that, tries to create a new one.
355 362
356Requests failing in certain ways will be automatically retried once, which 363Requests failing in certain ways will be automatically retried once, which
357is dangerous for non-idempotent requests, which is why it defaults to off 364is dangerous for non-idempotent requests, which is why it defaults to off
358for them. The reason for this is because the bozos who designed HTTP/1.1 365for them. The reason for this is because the bozos who designed HTTP/1.1
359made it impossible to distinguish between a fatal error and a normal 366made it impossible to distinguish between a fatal error and a normal
360connection timeout, so you never know whether there was a problem with 367connection timeout, so you never know whether there was a problem with
361your request or not. 368your request or not.
362 369
363When reusing an existent connection, many parameters (such as TLS context) 370When reusing an existent connection, many parameters (such as TLS context)
364will be ignored. See the C<session> parameter for a workaround. 371will be ignored. See the C<sessionid> parameter for a workaround.
365 372
366=item keepalive => $boolean 373=item keepalive => $boolean
367 374
368Only used when C<persistent> is also true. This parameter decides whether 375Only used when C<persistent> is also true. This parameter decides whether
369C<http_request> tries to handshake a HTTP/1.0-style keep-alive connection 376C<http_request> tries to handshake a HTTP/1.0-style keep-alive connection
709} 716}
710 717
711our %IDEMPOTENT = ( 718our %IDEMPOTENT = (
712 DELETE => 1, 719 DELETE => 1,
713 GET => 1, 720 GET => 1,
721 QUERY => 1,
714 HEAD => 1, 722 HEAD => 1,
715 OPTIONS => 1, 723 OPTIONS => 1,
716 PUT => 1, 724 PUT => 1,
717 TRACE => 1, 725 TRACE => 1,
718 726
730 MKCOL => 1, 738 MKCOL => 1,
731 MKREDIRECTREF => 1, 739 MKREDIRECTREF => 1,
732 MKWORKSPACE => 1, 740 MKWORKSPACE => 1,
733 MOVE => 1, 741 MOVE => 1,
734 ORDERPATCH => 1, 742 ORDERPATCH => 1,
743 PRI => 1,
735 PROPFIND => 1, 744 PROPFIND => 1,
736 PROPPATCH => 1, 745 PROPPATCH => 1,
737 REBIND => 1, 746 REBIND => 1,
738 REPORT => 1, 747 REPORT => 1,
739 SEARCH => 1, 748 SEARCH => 1,
1231# $state{handle}->destroyed 1240# $state{handle}->destroyed
1232# and die "AnyEvent::HTTP: unexpectedly got a destructed handle (1), please report.";#d# 1241# and die "AnyEvent::HTTP: unexpectedly got a destructed handle (1), please report.";#d#
1233 $prepare_handle->(); 1242 $prepare_handle->();
1234# $state{handle}->destroyed 1243# $state{handle}->destroyed
1235# and die "AnyEvent::HTTP: unexpectedly got a destructed handle (2), please report.";#d# 1244# and die "AnyEvent::HTTP: unexpectedly got a destructed handle (2), please report.";#d#
1245 $rpath = $upath;
1236 $handle_actual_request->(); 1246 $handle_actual_request->();
1237 1247
1238 } else { 1248 } else {
1239 my $tcp_connect = $arg{tcp_connect} 1249 my $tcp_connect = $arg{tcp_connect}
1240 || do { require AnyEvent::Socket; \&AnyEvent::Socket::tcp_connect }; 1250 || do { require AnyEvent::Socket; \&AnyEvent::Socket::tcp_connect };

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines