亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ftp.pm

?? 美國CMU大學開發的操作系統健壯性評測軟件
?? PM
字號:
## $Id: ftp.pm,v 1.1 1999/07/21 19:12:35 kraven Exp $# Implementation of the ftp protocol (RFC 959). We let the Net::FTP# package do all the dirty work.package LWP::Protocol::ftp;use Carp ();use HTTP::Status ();use HTTP::Negotiate ();use HTTP::Response ();use LWP::MediaTypes ();use File::Listing ();require LWP::Protocol;@ISA = qw(LWP::Protocol);use strict;eval {    require Net::FTP;    Net::FTP->require_version(2.00);};my $init_failed = $@;sub request{    my($self, $request, $proxy, $arg, $size, $timeout) = @_;    $size = 4096 unless $size;    LWP::Debug::trace('()');    # check proxy    if (defined $proxy)    {	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,				   'You can not proxy through the ftp');    }    my $url = $request->url;    if ($url->scheme ne 'ftp') {	my $scheme = $url->scheme;	return HTTP::Response->new(&HTTP::Status::RC_INTERNAL_SERVER_ERROR,		       "LWP::Protocol::ftp::request called for '$scheme'");    }    # check method    my $method = $request->method;    unless ($method eq 'GET' || $method eq 'HEAD' || $method eq 'PUT') {	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,				   'Library does not allow method ' .				   "$method for 'ftp:' URLs");    }    if ($init_failed) {	return HTTP::Response->new(&HTTP::Status::RC_INTERNAL_SERVER_ERROR,				   $init_failed);    }    my $host     = $url->host;    my $port     = $url->port;    my $user     = $url->user;    my $password = $url->password;    # If a basic autorization header is present than we prefer these over    # the username/password specified in the URL.    {	my($u,$p) = $request->authorization_basic;	if (defined $u) {	    $user = $u;	    $password = $p;	}    }    # We allow the account to be specified in the "Account" header    my $acct     = $request->header('Account');    # try to make a connection    my $ftp = Net::FTP->new($host, Port => $port);    unless ($ftp) {       $@ =~ s/^Net::FTP: //;       return HTTP::Response->new(&HTTP::Status::RC_INTERNAL_SERVER_ERROR, $@);    }    # Create an initial response object    my $response = HTTP::Response->new(&HTTP::Status::RC_OK,				       "Document follows");    $response->request($request);    my $mess = $ftp->message;  # welcome message    LWP::Debug::debug($mess);    $mess =~ s|\n.*||s; # only first line left    $mess =~ s|\s*ready\.?$||;    # Make the version number more HTTP like    $mess =~ s|\s*\(Version\s*|/| and $mess =~ s|\)$||;    $response->header("Server", $mess);    $ftp->timeout($timeout) if $timeout;    LWP::Debug::debug("Logging in as $user (password $password)...");    unless ($ftp->login($user, $password, $acct)) {	# Unauthorized.  Let's fake a RC_UNAUTHORIZED response	my $res =  HTTP::Response->new(&HTTP::Status::RC_UNAUTHORIZED,				       scalar($ftp->message));	$res->header("WWW-Authenticate", qq(Basic Realm="FTP login"));	return $res;    }    LWP::Debug::debug($ftp->message);    # Get & fix the path    my @path =  $url->path_components;    shift(@path);  # There will always be an empty first component    pop(@path) while @path && $path[-1] eq '';  # remove empty tailing comps    my $remote_file = pop(@path);    $remote_file = '' unless defined $remote_file;    my $params = $url->params;    if (defined($params) && $params eq 'type=a') {	$ftp->ascii;    } else {	$ftp->binary;    }    for (@path) {	LWP::Debug::debug("CWD $_");	unless ($ftp->cwd($_)) {	    return HTTP::Response->new(&HTTP::Status::RC_NOT_FOUND,				       "Can't chdir to $_");	}    }    if ($method eq 'GET' || $method eq 'HEAD') {	LWP::Debug::debug("MDTM");	if (my $mod_time = $ftp->mdtm($remote_file)) {	    $response->last_modified($mod_time);	    if (my $ims = $request->if_modified_since) {		if ($mod_time <= $ims) {		    $response->code(&HTTP::Status::RC_NOT_MODIFIED);		    $response->message("Not modified");		    return $response;		}	    }	}	my $data;  # the data handle	LWP::Debug::debug("retrieve file?");	if (length($remote_file) and $data = $ftp->retr($remote_file)) {	    my($type, @enc) = LWP::MediaTypes::guess_media_type($remote_file);	    $response->header('Content-Type',   $type) if $type;	    for (@enc) {		$response->push_header('Content-Encoding', $_);	    }	    my $mess = $ftp->message;	    LWP::Debug::debug($mess);	    if ($mess =~ /\((\d+)\s+bytes\)/) {		$response->header('Content-Length', "$1");	    }	    if ($method ne 'HEAD') {		# Read data from server		$response = $self->collect($arg, $response, sub {		    my $content = '';		    my $result = $data->read($content, $size);		    return \$content;		} );	    }	    unless ($data->close) {		# Something did not work too well		if ($method ne 'HEAD') {		    $response->code(&HTTP::Status::RC_INTERNAL_SERVER_ERROR);		    $response->message("FTP close response: " . $ftp->code .				       " " . $ftp->message);		}	    }	} elsif (!length($remote_file) || $ftp->code == 550) {	    # 550 not a plain file, try to list instead	    if (length($remote_file) && !$ftp->cwd($remote_file)) {		LWP::Debug::debug("chdir before listing failed");		return HTTP::Response->new(&HTTP::Status::RC_NOT_FOUND,					   "File '$remote_file' not found");	    }	    # It should now be safe to try to list the directory	    LWP::Debug::debug("dir");	    my @lsl = $ftp->dir;	    # Try to figure out if the user want us to convert the	    # directory listing to HTML.	    my @variants =	      (	       ['html',  0.60, 'text/html'            ],	       ['dir',   1.00, 'text/ftp-dir-listing' ]	      );	    #$HTTP::Negotiate::DEBUG=1;	    my $prefer = HTTP::Negotiate::choose(\@variants, $request);	    my $content = '';	    if (!defined($prefer)) {		return HTTP::Response->new(&HTTP::Status::RC_NOT_ACCEPTABLE,			       "Neither HTML nor directory listing wanted");	    } elsif ($prefer eq 'html') {		$response->header('Content-Type' => 'text/html');		$content = "<HEAD><TITLE>File Listing</TITLE>\n";		my $base = $request->url->clone;		my $path = $base->epath;		$base->epath("$path/") unless $path =~ m|/$|;		$content .= qq(<BASE HREF="$base">\n</HEAD>\n);		$content .= "<BODY>\n<UL>\n";		for (File::Listing::parse_dir(\@lsl, 'GMT')) {		    my($name, $type, $size, $mtime, $mode) = @$_;		    $content .= qq(  <LI> <a href="$name">$name</a>);		    $content .= " $size bytes" if $type eq 'f';		    $content .= "\n";		}		$content .= "</UL></body>\n";	    } else {		$response->header('Content-Type', 'text/ftp-dir-listing');		$content = join("\n", @lsl, '');	    }	    $response->header('Content-Length', length($content));	    if ($method ne 'HEAD') {		$response = $self->collect_once($arg, $response, $content);	    }	} else {	    my $res = HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,			  "FTP return code " . $ftp->code);	    $res->content_type("text/plain");	    $res->content($ftp->message);	    return $res;	}    } elsif ($method eq 'PUT') {	# method must be PUT	unless (length($remote_file)) {	    return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,				       "Must have a file name to PUT to");	}	my $data;	if ($data = $ftp->stor($remote_file)) {	    LWP::Debug::debug($ftp->message);	    LWP::Debug::debug("$data");	    my $content = $request->content;	    my $bytes = 0;	    if (defined $content) {		if (ref($content) eq 'SCALAR') {		    $bytes = $data->write($$content, length($$content));		} elsif (ref($content) eq 'CODE') {		    my($buf, $n);		    while (length($buf = &$content)) {			$n = $data->write($buf, length($buf));			last unless $n;			$bytes += $n;		    }		} elsif (!ref($content)) {		    if (defined $content && length($content)) {			$bytes = $data->write($content, length($content));		    }		} else {		    die "Bad content";		}	    }	    $data->close;	    LWP::Debug::debug($ftp->message);	    $response->code(&HTTP::Status::RC_CREATED);	    $response->header('Content-Type', 'text/plain');	    $response->content("$bytes bytes stored as $remote_file on $host\n")	} else {	    my $res = HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,					  "FTP return code " . $ftp->code);	    $res->content_type("text/plain");	    $res->content($ftp->message);	    return $res;	}    } else {	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,				   "Illegal method $method");    }    $response;}1;__END__# This is what RFC 1738 has to say about FTP access:# --------------------------------------------------## 3.2. FTP##    The FTP URL scheme is used to designate files and directories on#    Internet hosts accessible using the FTP protocol (RFC959).##    A FTP URL follow the syntax described in Section 3.1.  If :<port> is#    omitted, the port defaults to 21.## 3.2.1. FTP Name and Password##    A user name and password may be supplied; they are used in the ftp#    "USER" and "PASS" commands after first making the connection to the#    FTP server.  If no user name or password is supplied and one is#    requested by the FTP server, the conventions for "anonymous" FTP are#    to be used, as follows:##         The user name "anonymous" is supplied.##         The password is supplied as the Internet e-mail address#         of the end user accessing the resource.##    If the URL supplies a user name but no password, and the remote#    server requests a password, the program interpreting the FTP URL#    should request one from the user.## 3.2.2. FTP url-path##    The url-path of a FTP URL has the following syntax:##         <cwd1>/<cwd2>/.../<cwdN>/<name>;type=<typecode>##    Where <cwd1> through <cwdN> and <name> are (possibly encoded) strings#    and <typecode> is one of the characters "a", "i", or "d".  The part#    ";type=<typecode>" may be omitted. The <cwdx> and <name> parts may be#    empty. The whole url-path may be omitted, including the "/"#    delimiting it from the prefix containing user, password, host, and#    port.##    The url-path is interpreted as a series of FTP commands as follows:##       Each of the <cwd> elements is to be supplied, sequentially, as the#       argument to a CWD (change working directory) command.##       If the typecode is "d", perform a NLST (name list) command with#       <name> as the argument, and interpret the results as a file#       directory listing.##       Otherwise, perform a TYPE command with <typecode> as the argument,#       and then access the file whose name is <name> (for example, using#       the RETR command.)##    Within a name or CWD component, the characters "/" and ";" are#    reserved and must be encoded. The components are decoded prior to#    their use in the FTP protocol.  In particular, if the appropriate FTP#    sequence to access a particular file requires supplying a string#    containing a "/" as an argument to a CWD or RETR command, it is#    necessary to encode each "/".##    For example, the URL <URL:ftp://myname@host.dom/%2Fetc/motd> is#    interpreted by FTP-ing to "host.dom", logging in as "myname"#    (prompting for a password if it is asked for), and then executing#    "CWD /etc" and then "RETR motd". This has a different meaning from#    <URL:ftp://myname@host.dom/etc/motd> which would "CWD etc" and then#    "RETR motd"; the initial "CWD" might be executed relative to the#    default directory for "myname". On the other hand,#    <URL:ftp://myname@host.dom//etc/motd>, would "CWD " with a null#    argument, then "CWD etc", and then "RETR motd".##    FTP URLs may also be used for other operations; for example, it is#    possible to update a file on a remote file server, or infer#    information about it from the directory listings. The mechanism for#    doing so is not spelled out here.## 3.2.3. FTP Typecode is Optional##    The entire ;type=<typecode> part of a FTP URL is optional. If it is#    omitted, the client program interpreting the URL must guess the#    appropriate mode to use. In general, the data content type of a file#    can only be guessed from the name, e.g., from the suffix of the name;#    the appropriate type code to be used for transfer of the file can#    then be deduced from the data content of the file.## 3.2.4 Hierarchy##    For some file systems, the "/" used to denote the hierarchical#    structure of the URL corresponds to the delimiter used to construct a#    file name hierarchy, and thus, the filename will look similar to the#    URL path. This does NOT mean that the URL is a Unix filename.## 3.2.5. Optimization##    Clients accessing resources via FTP may employ additional heuristics#    to optimize the interaction. For some FTP servers, for example, it#    may be reasonable to keep the control connection open while accessing#    multiple URLs from the same server. However, there is no common#    hierarchical model to the FTP protocol, so if a directory change#    command has been given, it is impossible in general to deduce what#    sequence should be given to navigate to another directory for a#    second retrieval, if the paths are different.  The only reliable#    algorithm is to disconnect and reestablish the control connection.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品水蜜桃av综合天堂| 欧美在线短视频| 亚洲精品乱码久久久久久久久| 精品日韩一区二区| 91.xcao| 97超碰欧美中文字幕| 成人国产精品视频| 高清av一区二区| 从欧美一区二区三区| 91无套直看片红桃| 99久久婷婷国产综合精品| www.日韩av| 在线观看视频一区二区欧美日韩| 91久久精品一区二区| 艳妇臀荡乳欲伦亚洲一区| 亚洲国产精品一区二区www在线 | 国产美女娇喘av呻吟久久| 免费观看成人av| 国产成人免费在线视频| 高清av一区二区| 色综合久久久久综合99| 精品视频全国免费看| 成人动漫视频在线| 成人精品国产一区二区4080| 色94色欧美sute亚洲线路一久| 色狠狠一区二区| 欧美videossexotv100| 亚洲视频一区在线观看| 日本中文字幕一区| 高清久久久久久| caoporen国产精品视频| 欧美亚洲一区二区在线| 欧美电影精品一区二区| 久久99国产精品免费| 粉嫩久久99精品久久久久久夜| 在线亚洲一区二区| 精品国内片67194| 一区二区三区加勒比av| 久久国产尿小便嘘嘘| 91免费看`日韩一区二区| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品一二三区在线| 国产天堂亚洲国产碰碰| 国产欧美日韩三级| 专区另类欧美日韩| 亚洲视频在线观看一区| 久久免费偷拍视频| 亚洲激情欧美激情| 日日摸夜夜添夜夜添精品视频| 亚洲一区二区三区美女| 成人h精品动漫一区二区三区| 91美女片黄在线| 6080午夜不卡| 欧美激情资源网| 欧美乱熟臀69xxxxxx| 精品国产欧美一区二区| 久久影音资源网| 亚洲精品一二三区| 精品伊人久久久久7777人| 国产一区福利在线| 精品国产乱码久久久久久图片| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 91麻豆国产香蕉久久精品| 狠狠色丁香婷婷综合| 久久综合综合久久综合| 欧美视频精品在线观看| 国产日韩精品一区二区三区| 亚洲国产精品自拍| 国产精品天干天干在线综合| 亚洲午夜在线视频| 美腿丝袜一区二区三区| 99久久综合精品| 亚洲色图视频网| 九九久久精品视频| 91在线视频官网| 久久久国产综合精品女国产盗摄| 国产欧美精品一区二区三区四区| 五月天一区二区三区| 美女在线一区二区| 日韩精品一区二区三区蜜臀| 亚洲黄色录像片| 成人精品电影在线观看| 日韩理论在线观看| 久久99热这里只有精品| 欧美主播一区二区三区| 亚洲天天做日日做天天谢日日欢| 国产精品资源在线观看| 中文字幕欧美一| 懂色中文一区二区在线播放| 久久综合丝袜日本网| 99久久久精品| 国产精品美女视频| 国产91丝袜在线观看| 亚洲精品日韩专区silk| 成人精品国产福利| 中文字幕日韩精品一区 | 国产成人av电影免费在线观看| 日韩视频一区二区三区在线播放| 午夜av一区二区| 欧美三级视频在线观看| 一片黄亚洲嫩模| 日韩美女视频在线| 国产精品正在播放| 久久综合丝袜日本网| 在线精品视频小说1| 天天操天天干天天综合网| 在线日韩av片| 国产福利精品一区二区| 国产亚洲美州欧州综合国| 高清在线成人网| 欧美α欧美αv大片| 狠狠色丁香久久婷婷综合_中 | 欧美情侣在线播放| 亚洲主播在线播放| 这里是久久伊人| 麻豆精品久久久| 在线播放中文字幕一区| av影院午夜一区| 怡红院av一区二区三区| 欧美电影一区二区| 91亚洲精品久久久蜜桃| 亚洲一区视频在线| 欧美v日韩v国产v| 欧美日韩中字一区| 麻豆精品久久精品色综合| 久久久亚洲精品一区二区三区| 欧美精品成人一区二区三区四区| 全部av―极品视觉盛宴亚洲| 亚洲精品一区二区三区影院| 欧美日韩视频在线第一区 | 国产美女精品在线| 亚洲三级在线免费| 欧美成人aa大片| 欧美军同video69gay| 国产成人av一区二区| 亚洲成人高清在线| 一区二区三区四区在线| 久久久久久久久一| eeuss鲁片一区二区三区| 秋霞电影网一区二区| 亚洲国产电影在线观看| 日本道精品一区二区三区| 激情综合网av| 一区二区三区久久| 最新热久久免费视频| 欧美tickling挠脚心丨vk| 91视频在线观看| 92精品国产成人观看免费| 久久精品72免费观看| 成人免费一区二区三区视频| 国产精品欧美综合在线| 精品久久久网站| 欧美亚洲一区三区| 成人h精品动漫一区二区三区| 日韩高清中文字幕一区| 男人操女人的视频在线观看欧美| 亚洲色图制服诱惑| 久久精品亚洲精品国产欧美kt∨| 国产亚洲va综合人人澡精品| 欧美精品久久久久久久多人混战| 精品综合久久久久久8888| 国产精品99久久久久久宅男| 亚洲夂夂婷婷色拍ww47| 欧美激情自拍偷拍| 亚洲精品国产视频| 国产精品久久777777| 欧美激情中文字幕一区二区| 日韩精品一区二区三区视频在线观看| 91麻豆成人久久精品二区三区| 欧美成人一级视频| 国产精品视频一二| 久久久久久麻豆| 欧美性生交片4| 欧美一级久久久久久久大片| 欧美精品色一区二区三区| 久久亚洲二区三区| 亚洲美女淫视频| 亚洲精品国产一区二区精华液| 久久久久综合网| 久久久三级国产网站| 欧美大尺度电影在线| 中文字幕亚洲一区二区av在线| 亚洲电影你懂得| 五月综合激情婷婷六月色窝| 国产一区999| 成人性色生活片免费看爆迷你毛片| 捆绑变态av一区二区三区| 亚洲一区二区三区四区在线免费观看| 亚洲综合在线五月| 亚洲成人第一页| 国产成人精品aa毛片| 国产99一区视频免费| 丁香婷婷综合色啪| 在线电影国产精品| 精品久久国产字幕高潮| 亚洲精品在线观| 亚洲gay无套男同| 久久国产精品一区二区| 激情六月婷婷综合| 91精品国产综合久久福利|