我试图创建一个连接到网站并发送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.
答案 0 :(得分:2)
请改用:
#!/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;
答案 1 :(得分:1)
这是另一个版本,对行结尾略有修复,并接收输入的单行并显示它。
#!/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或其中一种替代方案。
答案 2 :(得分:1)
我无法相信这个问题已经过时了,仍然没有技术上正确的答案。
问题在于,无论如何,您都会告诉您的程序死亡。在IO :: Socket :: INET-&gt; new()的末尾,您有一个分号,终止该语句。下一个陈述是死的&#34;错误:$?&#34 ;;这将永远消亡。 $!恰好被设定为&#34;非法寻求&#34; - 您还没有创建此错误,并且您的程序中没有任何其他内容,它只是$?恰好被安排到现在。
除了您已更换&#34;或&#34;之外,没有任何错误导致错误用&#34;;&#34;在IO :: Select :: INET-&gt; new()之后(或者在死之前,取决于你的观点)。删除分号,添加&#34;或&#34;,更改&#34; googel.com&#34;到&#34; google.com&#34;,并在每个http://tools.ietf.org/html/rfc1945请求结尾添加一个双重回车/换行符(即:print $ socket&#34; GET / HTTP / 1.0 \ r \ n \ n \ r \ n&#34;;)程序将按预期运行。