AnyEvent-HTTP
view release on metacpan or search on metacpan
which case you can look at the URL pseudo header).
The pseudo-header "Redirect" only exists when the request was a
result of an internal redirect. In that case it is an array
reference with the "($data, $headers)" from the redirect response.
Note that this response could in turn be the result of a redirect
itself, and "$headers->{Redirect}[1]{Redirect}" will then contain
the original response, and so on.
If the server sends a header multiple times, then their contents
will be joined together with a comma (","), as per the HTTP spec.
If an internal error occurs, such as not being able to resolve a
hostname, then $data will be "undef", "$headers->{Status}" will be
590-599 and the "Reason" pseudo-header will contain an error
message. Currently the following status codes are used:
595 - errors during connection establishment, proxy handshake.
596 - errors during TLS negotiation, request sending and header
processing.
597 - errors during body receiving or processing.
598 - user aborted request via "on_header" or "on_body".
599 - other, usually nonretryable, errors (garbled URL etc.).
A typical callback might look like this:
sub {
my ($body, $hdr) = @_;
if ($hdr->{Status} =~ /^2/) {
... everything should be ok
} else {
print "error, $hdr->{Status} $hdr->{Reason}\n";
}
}
Additional parameters are key-value pairs, and are fully optional.
They include:
recurse => $count (default: $MAX_RECURSE)
Whether to recurse requests or not, e.g. on redirects,
authentication and other retries and so on, and how often to do
so.
Only redirects to http and https URLs are supported. While most
common redirection forms are handled entirely within this
module, some require the use of the optional URI module. If it
is required but missing, then the request will fail with an
error.
headers => hashref
The request headers to use. Currently, "http_request" may
provide its own "Host:", "Content-Length:", "Connection:" and
"Cookie:" headers and will provide defaults at least for "TE:",
"Referer:" and "User-Agent:" (this can be suppressed by using
"undef" for these headers in which case they won't be sent at
all).
You really should provide your own "User-Agent:" header value
that is appropriate for your program - I wouldn't be surprised
if the default AnyEvent string gets blocked by webservers sooner
or later.
Also, make sure that your headers names and values do not
contain any embedded newlines.
timeout => $seconds
The time-out to use for various stages - each connect attempt
will reset the timeout, as will read or write activity, i.e.
this is not an overall timeout.
Default timeout is 5 minutes.
proxy => [$host, $port[, $scheme]] or undef
Use the given http proxy for all requests, or no proxy if
"undef" is used.
$scheme must be either missing or must be "http" for HTTP.
If not specified, then the default proxy is used (see
"AnyEvent::HTTP::set_proxy").
Currently, if your proxy requires authorization, you have to
specify an appropriate "Proxy-Authorization" header in every
request.
Note that this module will prefer an existing persistent
connection, even if that connection was made using another
proxy. If you need to ensure that a new connection is made in
this case, you can either force "persistent" to false or e.g.
use the proxy address in your "sessionid".
body => $string
The request body, usually empty. Will be sent as-is (future
versions of this module might offer more options).
cookie_jar => $hash_ref
Passing this parameter enables (simplified) cookie-processing,
loosely based on the original netscape specification.
The $hash_ref must be an (initially empty) hash reference which
will get updated automatically. It is possible to save the
cookie jar to persistent storage with something like JSON or
Storable - see the "AnyEvent::HTTP::cookie_jar_expire" function
if you wish to remove expired or session-only cookies, and also
for documentation on the format of the cookie jar.
Note that this cookie implementation is not meant to be
complete. If you want complete cookie management you have to do
that on your own. "cookie_jar" is meant as a quick fix to get
most cookie-using sites working. Cookies are a privacy disaster,
do not use them unless required to.
When cookie processing is enabled, the "Cookie:" and
"Set-Cookie:" headers will be set and handled by this module,
otherwise they will be left untouched.
tls_ctx => $scheme | $tls_ctx
Specifies the AnyEvent::TLS context to be used for https
connections. This parameter follows the same rules as the
"tls_ctx" parameter to AnyEvent::Handle, but additionally, the
( run in 2.839 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )