Perl -创建套接字

egdjgwm8  于 2022-12-13  发布在  Perl
关注(0)|答案(3)|浏览(158)

我试图创建一个连接到网站的套接字,并发送GET请求,但当我这样做时,我得到了一个错误。
这是我代码

#!/usr/bin/perl -w 
use IO::Socket;
$socket = IO::Socket::INET->new(
PeerAddr => "www.googel.com",
PeerPort => "http(80)",
Proto => "tcp");
die "Error: $!";
print $socket "GET / HTTP/1.0";
close $socket;

误差为:

Error: Illegal seek at socket.pl line 7.
w46czmvw

w46czmvw1#

请使用以下命令:

#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket;

my $socket = IO::Socket::INET->new(
    PeerAddr => "www.googel.com",
    PeerPort => "http(80)",
    Proto => "tcp") or  # Note or instead of ;
#                 __^__
       die "Error: $!";
print $socket "GET / HTTP/1.0";
close $socket;
omqzjyyz

omqzjyyz2#

这里有另一个版本,对行尾做了轻微的修复,接收并显示一行输入。

#!/usr/bin/env perl
use strict;
use warnings;
use IO::Socket;

my $socket = IO::Socket::INET->new(
    PeerAddr => 'www.google.com',
    PeerPort => 'http(80)',
    Proto    => 'tcp',
) or die("Error :: $!");

print($socket "GET / HTTP/1.1\r\n");
print($socket "\r\n");
my $recv_line = <$socket>;
print $recv_line;

虽然如果你打算实际访问一个URL或抓取内容,我强烈建议你使用LWP::UserAgent或许多替代品之一。

mpgws1up

mpgws1up3#

我不敢相信这个问题已经这么老了,仍然没有技术上正确的答案。
问题是你告诉你的程序去死,无论如何。在IO::Socket::INET-〉new()的结尾你有一个分号,终止了那个语句。下一个语句是die“Error:$?";它总是会死。$?只是碰巧被设置为“非法搜索”--你没有创建这个错误,也没有在你的程序中有任何其他东西,它只是$?碰巧被设置为此刻。
除了将“or”替换为“”之外,没有任何操作导致错误;“在IO::之后选择::INET-〉new()(或在die之前,取决于您的观点)。删除分号,添加“或”,将“googel.com“更改为“google.com“,并在请求末尾添加双回车/换行符(即:HTTP/1.0\r\n\r\n”的数据包;),程序将按您预期的方式运行。

相关问题