请教:关于socket的问题
时间:2010-08-06
来源:互联网
我有如下代码,这个代码可以正常的得到网页的内容,也就是文本内容。但却无法将二进制文件的内容读出,请问问题是出在请求方式还是读写方式上呢?能否给出正确的方式呢?我已经翻阅了好多资料,可是怎么改也不对。还望指教。
请求网页时是200,但是请求zip文件或者MP3时就变成400了。
代码如下:
#!perl!
#
use strict;
use IO::Socket qw(
EFAULT :crlf);
my $data;
$/ = CRLF;
my ($host,$port,$path);
my $address_new = shift;
($host,$port,$path) = ($1,$2||80,$3) if($address_new =~ m!^(?:http://)?(.*?)(?:
[0-9]+))?(/.*)$!x);
print "[$host] [$port] [$path]\n\n";
my $socket = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => $port,
Type => SOCK_STREAM,
Timeout => 20
) or die "Can't connect
!";
print $socket "GET $path HTTP/1.1",CRLF,CRLF;
print $socket "HOST
host
port";
my $out;
read ($socket,$out,1024);
print "$out\n";
close $socket;
请求网页时是200,但是请求zip文件或者MP3时就变成400了。
代码如下:
#!perl!
#
use strict;
use IO::Socket qw(

my $data;
$/ = CRLF;
my ($host,$port,$path);
my $address_new = shift;
($host,$port,$path) = ($1,$2||80,$3) if($address_new =~ m!^(?:http://)?(.*?)(?:

print "[$host] [$port] [$path]\n\n";
my $socket = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => $port,
Type => SOCK_STREAM,
Timeout => 20
) or die "Can't connect

print $socket "GET $path HTTP/1.1",CRLF,CRLF;
print $socket "HOST


my $out;
read ($socket,$out,1024);
print "$out\n";
close $socket;
作者: lanmeibanban 发布时间: 2010-08-06
本帖最后由 lanmeibanban 于 2010-08-06 17:33 编辑
晕,貌似又可以了。做了一些改动。主要是换行的。我是按perl网络编程里的格式写的。但是参考了网上perl http断点续传那个例子。将请求的头换行改了下。貌似能读了。。。。
代码如下:
#!perl!
#
use strict;
use IO::Socket qw(
EFAULT :crlf);
my $data;
my ($host,$port,$path);
my $address_new = shift;
($host,$port,$path) = ($1,$2||80,$3) if($address_new =~ m!^(?:http://)?(.*?)(?:
[0-9]+))?(/.*)$!x);
print "[$host] [$port] [$path]\n\n";
my $socket = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => $port,
Type => SOCK_STREAM,
Timeout => 20
) or die "Can't connect
!";
print $socket "GET $path HTTP/1.1\n";
print $socket "HOST
host\n";
print $socket "Connection: close\n\n";
my $out;
sysread ($socket,$out,1024);
print "$out\n";
close $socket;
晕,貌似又可以了。做了一些改动。主要是换行的。我是按perl网络编程里的格式写的。但是参考了网上perl http断点续传那个例子。将请求的头换行改了下。貌似能读了。。。。
代码如下:
#!perl!
#
use strict;
use IO::Socket qw(

my $data;
my ($host,$port,$path);
my $address_new = shift;
($host,$port,$path) = ($1,$2||80,$3) if($address_new =~ m!^(?:http://)?(.*?)(?:

print "[$host] [$port] [$path]\n\n";
my $socket = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => $port,
Type => SOCK_STREAM,
Timeout => 20
) or die "Can't connect

print $socket "GET $path HTTP/1.1\n";
print $socket "HOST

print $socket "Connection: close\n\n";
my $out;
sysread ($socket,$out,1024);
print "$out\n";
close $socket;
作者: lanmeibanban 发布时间: 2010-08-06
晕。怎么能不让表情显示出来。。。。好好的字符都成表情了。。不能不自动转换么?
作者: lanmeibanban 发布时间: 2010-08-06
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28