⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cgi_lib.pl

📁 harvest是一个下载html网页得机器人
💻 PL
字号:
# Perl Routines to Manipulate CGI input# S.E.Brenner@bioc.cam.ac.uk# $Header: /cys/people/brenner/http/cgi-bin/RCS/cgi-lib.pl,v 1.14 1995/10/25 15:08:37 brenner Exp $## Copyright (c) 1995 Steven E. Brenner  # Unpublished work.# Permission granted to use and modify this library so long as the# copyright above is maintained, modifications are documented, and# credit is given for any use of the library.## Thanks are due to many people for reporting bugs and suggestions# especially Meng Weng Wong, Maki Watanabe, Bo Frese Rasmussen,# Andrew Dalke, Mark-Jason Dominus, Dave Dittrich, Jason Mathews# For more information, see:#     http://www.bio.cam.ac.uk/web/form.html       #     http://www.seas.upenn.edu/~mengwong/forms/   # Minimalist http form and script (http://www.bio.cam.ac.uk/web/minimal.cgi):## require "cgi-lib.pl";# if (&ReadParse(*input)) {#    print &PrintHeader, &PrintVariables(%input);# } else {#   print &PrintHeader,'<form><input type="submit">Data: <input name="myfield">';#}# ReadParse# Reads in GET or POST data, converts it to unescaped text, and puts# one key=value in each member of the list "@in"# Also creates key/value pairs in %in, using '\0' to separate multiple# selections# Returns TRUE if there was input, FALSE if there was no input # UNDEF may be used in the future to indicate some failure.# Now that cgi scripts can be put in the normal file space, it is useful# to combine both the form and the script in one place.  If no parameters# are given (i.e., ReadParse returns FALSE), then a form could be output.# If a variable-glob parameter (e.g., *cgi_input) is passed to ReadParse,# information is stored there, rather than in $in, @in, and %in.sub ReadParse {  local (*in) = @_ if @_;  local ($i, $key, $val);  # Read in text  if (&MethGet) {    $in = $ENV{'QUERY_STRING'};  } elsif (&MethPost) {    read(STDIN,$in,$ENV{'CONTENT_LENGTH'});  }  @in = split(/[&;]/,$in);   foreach $i (0 .. $#in) {    # Convert plus's to spaces    $in[$i] =~ s/\+/ /g;    # Split into key and value.      ($key, $val) = split(/=/,$in[$i],2); # splits on the first =.    # Convert %XX from hex numbers to alphanumeric    $key =~ s/%(..)/pack("c",hex($1))/ge;    $val =~ s/%(..)/pack("c",hex($1))/ge;    # Associate key and value    $in{$key} .= "\0" if (defined($in{$key})); # \0 is the multiple separator    $in{$key} .= $val;  }  return scalar(@in); }# PrintHeader# Returns the magic line which tells WWW that we're an HTML documentsub PrintHeader {  return "Content-type: text/html\n\n";}# HtmlTop# Returns the <head> of a document and the beginning of the body# with the title and a body <h1> header as specified by the parametersub HtmlTop{  local ($title) = @_;  return <<END_OF_TEXT;<html><head><title>$title</title></head><body><h1>$title</h1>END_OF_TEXT}# Html Bot# Returns the </body>, </html> codes for the bottom of every HTML pagesub HtmlBot{   return "</body>\n</html>\n"; }# MethGet# Return true if this cgi call was using the GET request, false otherwisesub MethGet {  return ($ENV{'REQUEST_METHOD'} eq "GET");}# MethPost# Return true if this cgi call was using the POST request, false otherwisesub MethPost {  return ($ENV{'REQUEST_METHOD'} eq "POST");}# MyURL# Returns a URL to the scriptsub MyURL  {  local ($port);  $port = ":" . $ENV{'SERVER_PORT'} if  $ENV{'SERVER_PORT'} != 80;  return  'http://' . $ENV{'SERVER_NAME'} .  $port . $ENV{'SCRIPT_NAME'};}# CgiError# Prints out an error message which which containes appropriate headers,# markup, etcetera.# Parameters:#  If no parameters, gives a generic error message#  Otherwise, the first parameter will be the title and the rest will #  be given as different paragraphs of the bodysub CgiError {  local (@msg) = @_;  local ($i,$name);  if (!@msg) {    $name = &MyURL;    @msg = ("Error: script $name encountered fatal error");  };  print &PrintHeader;  print "<html><head><title>$msg[0]</title></head>\n";  print "<body><h1>$msg[0]</h1>\n";  foreach $i (1 .. $#msg) {    print "<p>$msg[$i]</p>\n";  }  print "</body></html>\n";}# CgiDie# Identical to CgiError, but also quits with the passed error message.sub CgiDie {  local (@msg) = @_;  &CgiError (@msg);  die @msg;}# PrintVariables# Nicely formats variables in an associative array passed as a parameter# And returns the HTML string.sub PrintVariables {  local (%in) = @_;  local ($old, $out, $output);  $old = $*;  $* =1;  $output .=  "\n<dl compact>\n";  foreach $key (sort keys(%in)) {    foreach (split("\0", $in{$key})) {      ($out = $_) =~ s/\n/<br>\n/g;      $output .=  "<dt><b>$key</b>\n <dd><i>$out</i><br>\n";    }  }  $output .=  "</dl>\n";  $* = $old;  return $output;}return 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -