Net::SSLeay::Handle - Perl module that lets SSL (HTTPS) sockets be handled as standard file handles.
use Net::SSLeay::Handle qw/shutdown/;
my ($host, $port) = ("localhost", 443);
tie(*SSL, "Net::SSLeay::Handle", $host, $port);
print SSL "GET / HTTP/1.0\r\n"; shutdown(\*SSL, 1); print while (<SSL>); close SSL;
print SSL "GET / HTTP/1.0\r\n";
and
print while (<SSL>);
If you export the shutdown routine, then the only extra code that you need to add to your program is the tie function as in:
my $socket;
if ($scheme eq "https") {
tie(*S2, "Net::SSLeay::Handle", host, $port);
$socket = \*S2;
else {
$socket = Net::SSLeay::Handle->make_socket(host, $port);
}
print $socket $request_headers;
...
my $socket \*S1;
if ($scheme eq "https") {
tie(*S2, "Net::SSLeay::Handle", $socket);
$socket = \*S2;
}
my $last_sel = select($socket); $| = 1; select($last_sel);
print $socket $request_headers;
...
Note: As far as I know you must be careful with the globs in the tie() function. The first parameter must be a glob (*SOMETHING) and the last parameter must be a reference to a glob (\*SOMETHING_ELSE) or a scaler that was assigned to a reference to a glob (as in the example above)
Also, the two globs must be different. When I tried to use the same glob, I got a core dump.
You can export the shutdown() function.
It is suggested that you do export shutdown() or use the fully qualified Net::SSLeay::Handle::shutdown() function to shutdown SSL sockets. It should be smart enough to distinguish between SSL and non-SSL sockets and do the right thing.
use Net::SSLeay::Handle qw/shutdown/;
my ($host, $port) = ("localhost", 443);
tie(*SSL, "Net::SSLeay::Handle", $host, $port);
print SSL "GET / HTTP/1.0\r\n"; shutdown(\*SSL, 1); print while (<SSL>); close SSL;
The first parameter to tie() must be a glob (*SOMETHING) and the last parameter must be a reference to a glob (\*SOMETHING_ELSE) or a scaler that was assigned to a reference to a glob ($s = \*SOMETHING_ELSE). Also, the two globs must be different. When I tried to use the same glob, I got a core dump.
I was able to associate attributes to globs created by this module (like *SSL above) by making a hash of hashes keyed by the file head1.
Support for old perls may not be 100%. If in trouble try 5.6.0 or newer.
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |