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.119 by root, Sun Jun 8 23:33:28 2014 UTC vs.
Revision 1.123 by root, Fri May 8 17:34:35 2015 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.2; 51our $VERSION = 2.21;
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;
194 194
195C<$scheme> must be either missing or must be C<http> for HTTP. 195C<$scheme> must be either missing or must be C<http> for HTTP.
196 196
197If not specified, then the default proxy is used (see 197If not specified, then the default proxy is used (see
198C<AnyEvent::HTTP::set_proxy>). 198C<AnyEvent::HTTP::set_proxy>).
199
200Currently, if your proxy requires authorization, you have to specify an
201appropriate "Proxy-Authorization" header in every request.
199 202
200=item body => $string 203=item body => $string
201 204
202The request body, usually empty. Will be sent as-is (future versions of 205The request body, usually empty. Will be sent as-is (future versions of
203this module might offer more options). 206this module might offer more options).
846 # send request 849 # send request
847 $hdl->push_write ( 850 $hdl->push_write (
848 "$method $rpath HTTP/1.1\015\012" 851 "$method $rpath HTTP/1.1\015\012"
849 . (join "", map "\u$_: $hdr{$_}\015\012", grep defined $hdr{$_}, keys %hdr) 852 . (join "", map "\u$_: $hdr{$_}\015\012", grep defined $hdr{$_}, keys %hdr)
850 . "\015\012" 853 . "\015\012"
851 . (delete $arg{body}) 854 . $arg{body}
852 ); 855 );
853 856
854 # return if error occurred during push_write() 857 # return if error occurred during push_write()
855 return unless %state; 858 return unless %state;
856 859
934 # industry standard is to redirect POST as GET for 937 # industry standard is to redirect POST as GET for
935 # 301, 302 and 303, in contrast to HTTP/1.0 and 1.1. 938 # 301, 302 and 303, in contrast to HTTP/1.0 and 1.1.
936 # also, the UA should ask the user for 301 and 307 and POST, 939 # also, the UA should ask the user for 301 and 307 and POST,
937 # industry standard seems to be to simply follow. 940 # industry standard seems to be to simply follow.
938 # we go with the industry standard. 308 is defined 941 # we go with the industry standard. 308 is defined
939 # by rfc7238 942 # by rfc7538
940 if ($status == 301 or $status == 302 or $status == 303) { 943 if ($status == 301 or $status == 302 or $status == 303) {
944 $redirect = 1;
941 # HTTP/1.1 is unclear on how to mutate the method 945 # HTTP/1.1 is unclear on how to mutate the method
942 $method = "GET" unless $method eq "HEAD"; 946 unless ($method eq "HEAD") {
943 $redirect = 1; 947 $method = "GET";
948 delete $arg{body};
949 }
944 } elsif ($status == 307 or $status == 308) { 950 } elsif ($status == 307 or $status == 308) {
945 $redirect = 1; 951 $redirect = 1;
946 } 952 }
947 } 953 }
948 954
1176 1182
1177 # now handle proxy-CONNECT method 1183 # now handle proxy-CONNECT method
1178 if ($proxy && $uscheme eq "https") { 1184 if ($proxy && $uscheme eq "https") {
1179 # oh dear, we have to wrap it into a connect request 1185 # oh dear, we have to wrap it into a connect request
1180 1186
1187 my $auth = exists $hdr{"proxy-authorization"}
1188 ? "proxy-authorization: " . (delete $hdr{"proxy-authorization"}) . "\015\012"
1189 : "";
1190
1181 # maybe re-use $uauthority with patched port? 1191 # maybe re-use $uauthority with patched port?
1182 $state{handle}->push_write ("CONNECT $uhost:$uport HTTP/1.0\015\012\015\012"); 1192 $state{handle}->push_write ("CONNECT $uhost:$uport HTTP/1.0\015\012$auth\015\012");
1183 $state{handle}->push_read (line => $qr_nlnl, sub { 1193 $state{handle}->push_read (line => $qr_nlnl, sub {
1184 $_[1] =~ /^HTTP\/([0-9\.]+) \s+ ([0-9]{3}) (?: \s+ ([^\015\012]*) )?/ix 1194 $_[1] =~ /^HTTP\/([0-9\.]+) \s+ ([0-9]{3}) (?: \s+ ([^\015\012]*) )?/ix
1185 or return _error %state, $cb, { @pseudo, Status => 599, Reason => "Invalid proxy connect response ($_[1])" }; 1195 or return _error %state, $cb, { @pseudo, Status => 599, Reason => "Invalid proxy connect response ($_[1])" };
1186 1196
1187 if ($2 == 200) { 1197 if ($2 == 200) {
1190 } else { 1200 } else {
1191 _error %state, $cb, { @pseudo, Status => $2, Reason => $3 }; 1201 _error %state, $cb, { @pseudo, Status => $2, Reason => $3 };
1192 } 1202 }
1193 }); 1203 });
1194 } else { 1204 } else {
1205 delete $hdr{"proxy-authorization"} unless $proxy;
1206
1195 $handle_actual_request->(); 1207 $handle_actual_request->();
1196 } 1208 }
1197 }; 1209 };
1198 1210
1199 _get_slot $uhost, sub { 1211 _get_slot $uhost, sub {
1277save cookies to disk, and you should call this function after loading them 1289save cookies to disk, and you should call this function after loading them
1278again. If you have a long-running program you can additionally call this 1290again. If you have a long-running program you can additionally call this
1279function from time to time. 1291function from time to time.
1280 1292
1281A cookie jar is initially an empty hash-reference that is managed by this 1293A cookie jar is initially an empty hash-reference that is managed by this
1282module. It's format is subject to change, but currently it is like this: 1294module. Its format is subject to change, but currently it is as follows:
1283 1295
1284The key C<version> has to contain C<1>, otherwise the hash gets 1296The key C<version> has to contain C<1>, otherwise the hash gets
1285emptied. All other keys are hostnames or IP addresses pointing to 1297emptied. All other keys are hostnames or IP addresses pointing to
1286hash-references. The key for these inner hash references is the 1298hash-references. The key for these inner hash references is the
1287server path for which this cookie is meant, and the values are again 1299server path for which this cookie is meant, and the values are again
1332C<Mozilla/5.0 (compatible; U; AnyEvent-HTTP/$VERSION; +http://software.schmorp.de/pkg/AnyEvent)>). 1344C<Mozilla/5.0 (compatible; U; AnyEvent-HTTP/$VERSION; +http://software.schmorp.de/pkg/AnyEvent)>).
1333 1345
1334=item $AnyEvent::HTTP::MAX_PER_HOST 1346=item $AnyEvent::HTTP::MAX_PER_HOST
1335 1347
1336The maximum number of concurrent connections to the same host (identified 1348The maximum number of concurrent connections to the same host (identified
1337by the hostname). If the limit is exceeded, then the additional requests 1349by the hostname). If the limit is exceeded, then additional requests
1338are queued until previous connections are closed. Both persistent and 1350are queued until previous connections are closed. Both persistent and
1339non-persistent connections are counted in this limit. 1351non-persistent connections are counted in this limit.
1340 1352
1341The default value for this is C<4>, and it is highly advisable to not 1353The default value for this is C<4>, and it is highly advisable to not
1342increase it much. 1354increase it much.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines