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

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

?? headers.pm

?? ARM上的如果你對底層感興趣
?? PM
?? 第 1 頁 / 共 2 頁
字號:
#
# $Id: Headers.pm,v 1.36 1998/04/10 14:51:22 aas Exp $

package HTTP::Headers;

=head1 NAME

HTTP::Headers - Class encapsulating HTTP Message headers

=head1 SYNOPSIS

 require HTTP::Headers;
 $h = new HTTP::Headers;

=head1 DESCRIPTION

The C<HTTP::Headers> class encapsulates HTTP-style message headers.
The headers consist of attribute-value pairs, which may be repeated,
and which are printed in a particular order.

Instances of this class are usually created as member variables of the
C<HTTP::Request> and C<HTTP::Response> classes, internal to the
library.

The following methods are available:

=over 4

=cut

use strict;
use vars qw($VERSION $TRANSLATE_UNDERSCORE);
$VERSION = sprintf("%d.%02d", q$Revision: 1.36 $ =~ /(\d+)\.(\d+)/);

use Carp ();

# Could not use the AutoLoader becase several of the method names are
# not unique in the first 8 characters.
#use SelfLoader;


# "Good Practice" order of HTTP message headers:
#    - General-Headers
#    - Request-Headers
#    - Response-Headers
#    - Entity-Headers
# (From draft-ietf-http-v11-spec-rev-01, Nov 21, 1997)

my @header_order = qw(
   Cache-Control Connection Date Pragma Transfer-Encoding Upgrade Trailer Via

   Accept Accept-Charset Accept-Encoding Accept-Language
   Authorization Expect From Host
   If-Modified-Since If-Match If-None-Match If-Range If-Unmodified-Since
   Max-Forwards Proxy-Authorization Range Referer TE User-Agent

   Accept-Ranges Age Location Proxy-Authenticate Retry-After Server Vary
   Warning WWW-Authenticate

   Allow Content-Base Content-Encoding Content-Language Content-Length
   Content-Location Content-MD5 Content-Range Content-Type
   ETag Expires Last-Modified
);

# Make alternative representations of @header_order.  This is used
# for sorting and case matching.
my $i = 0;
my %header_order;
my %standard_case;
for (@header_order) {
    my $lc = lc $_;
    $header_order{$lc} = $i++;
    $standard_case{$lc} = $_;
}

$TRANSLATE_UNDERSCORE = 1 unless defined $TRANSLATE_UNDERSCORE;



=item $h = new HTTP::Headers

Constructs a new C<HTTP::Headers> object.  You might pass some initial
attribute-value pairs as parameters to the constructor.  I<E.g.>:

 $h = new HTTP::Headers
     Date         => 'Thu, 03 Feb 1994 00:00:00 GMT',
     Content_Type => 'text/html; version=3.2',
     Content_Base => 'http://www.sn.no/';

=cut

sub new
{
    my($class) = shift;
    my $self = bless {}, $class;
    $self->header(@_); # set up initial headers
    $self;
}


=item $h->header($field [=> $value],...)

Get or set the value of a header.  The header field name is not case
sensitive.  To make the life easier for perl users who wants to avoid
quoting before the => operator, you can use '_' as a synonym for '-'
in header names (this behaviour can be suppressed by setting
$HTTP::Headers::TRANSLATE_UNDERSCORE to a FALSE value).

The header() method accepts multiple ($field => $value) pairs, so you
can update several fields with a single invocation.

The optional $value argument may be a scalar or a reference to a list
of scalars. If the $value argument is undefined or not given, then the
header is not modified.

The old value of the last of the $field values is returned.
Multi-valued fields will be concatenated with "," as separator in
scalar context.

 $header->header(MIME_Version => '1.0',
		 User_Agent   => 'My-Web-Client/0.01');
 $header->header(Accept => "text/html, text/plain, image/*");
 $header->header(Accept => [qw(text/html text/plain image/*)]);
 @accepts = $header->header('Accept');

=cut

sub header
{
    my $self = shift;
    my($field, $val, @old);
    while (($field, $val) = splice(@_, 0, 2)) {
	@old = $self->_header($field, $val);
    }
    return @old if wantarray;
    return $old[0] if @old <= 1;
    join(", ", @old);
}

sub _header
{
    my($self, $field, $val, $push) = @_;
    $field =~ tr/_/-/ if $TRANSLATE_UNDERSCORE;

    # $push is only used interally sub push_header
    Carp::croak('Need a field name') unless length($field);

    my $lc_field = lc $field;
    unless(defined $standard_case{$lc_field}) {
	# generate a %stadard_case entry for this field
	$field =~ s/\b(\w)/\u$1/g;
	$standard_case{$lc_field} = $field;
    }

    my $h = $self->{$lc_field};
    my @old = ref($h) ? @$h : (defined($h) ? ($h) : ());

    if (defined $val) {
	my @new = $push ? @old : ();
	if (!ref($val)) {
	    push(@new, $val);
	} elsif (ref($val) eq 'ARRAY') {
	    push(@new, @$val);
	} else {
	    Carp::croak("Unexpected field value $val");
	}
	$self->{$lc_field} = @new > 1 ? \@new : $new[0];
    }
    @old;
}


# Compare function which makes it easy to sort headers in the
# recommended "Good Practice" order.
sub _header_cmp
{
    # Unknown headers are assign a large value so that they are
    # sorted last.  This also helps avoiding a warning from -w
    # about comparing undefined values.
    $header_order{$a} = 999 unless defined $header_order{$a};
    $header_order{$b} = 999 unless defined $header_order{$b};

    $header_order{$a} <=> $header_order{$b} || $a cmp $b;
}


=item $h->scan(\&doit)

Apply a subroutine to each header in turn.  The callback routine is
called with two parameters; the name of the field and a single value.
If the header has more than one value, then the routine is called once
for each value.  The field name passed to the callback routine has
case as suggested by HTTP Spec, and the headers will be visited in the
recommended "Good Practice" order.

=cut

sub scan
{
    my($self, $sub) = @_;
    my $key;
    foreach $key (sort _header_cmp keys %$self) {
        next if $key =~ /^_/;
	my $vals = $self->{$key};
	if (ref($vals)) {
	    my $val;
	    for $val (@$vals) {
		&$sub($standard_case{$key} || $key, $val);
	    }
	} else {
	    &$sub($standard_case{$key} || $key, $vals);
	}
    }
}


=item $h->as_string([$endl])

Return the header fields as a formatted MIME header.  Since it
internally uses the C<scan()> method to build the string, the result
will use case as suggested by HTTP Spec, and it will follow
recommended "Good Practice" of ordering the header fieds.  Long header
values are not folded. 

The optional parameter specifies the line ending sequence to use.  The
default is C<"\n">.  Embedded "\n" characters in the header will be
substitued with this line ending sequence.

=cut

sub as_string
{
    my($self, $endl) = @_;
    $endl = "\n" unless defined $endl;

    my @result = ();
    $self->scan(sub {
	my($field, $val) = @_;
	if ($val =~ /\n/) {
	    # must handle header values with embedded newlines with care
	    $val =~ s/\s+$//;          # trailing newlines and space must go
	    $val =~ s/\n\n+/\n/g;      # no empty lines
	    $val =~ s/\n([^\040\t])/\n $1/g;  # intial space for continuation
	    $val =~ s/\n/$endl/g;      # substitute with requested line ending
	}
	push(@result, "$field: $val");
    });

    join($endl, @result, '');
}


# The remaining functions should autoloaded only when needed

# A bug in 5.002gamma makes it risky to have POD text inside the
# autoloaded section of the code, so we keep the documentation before
# the __DATA__ token.

=item $h->push_header($field, $val)

Add a new field value of the specified header.  The header field name
is not case sensitive.  The field need not already have a
value. Previous values for the same field are retained.  The argument
may be a scalar or a reference to a list of scalars.

 $header->push_header(Accept => 'image/jpeg');

=item $h->remove_header($field,...)

This function removes the headers with the specified names.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡的电视剧免费网站有什么| 亚洲午夜视频在线观看| 免费人成网站在线观看欧美高清| 欧美性色黄大片| 天堂成人免费av电影一区| 欧美日韩国产免费| 日韩经典中文字幕一区| 日韩欧美电影一区| 国产成人三级在线观看| 亚洲三级免费电影| 欧美喷潮久久久xxxxx| 精品一区二区av| 国产精品不卡视频| 欧美日韩一区二区三区视频| 蜜芽一区二区三区| 国产欧美日韩一区二区三区在线观看| 成人国产精品免费观看视频| 亚洲一区在线观看网站| 欧美tk丨vk视频| 国产不卡高清在线观看视频| 亚洲无人区一区| 久久精品亚洲麻豆av一区二区| 91亚洲精品乱码久久久久久蜜桃 | 久久久国际精品| 成人av网站在线观看| 午夜视频在线观看一区二区| 久久久久久99久久久精品网站| 91视频免费看| 精品一区二区三区久久| 亚洲日本va午夜在线电影| 91精品国产麻豆国产自产在线| 国产精品白丝jk白祙喷水网站| 亚洲资源中文字幕| 国产校园另类小说区| 欧美日韩精品三区| 国产sm精品调教视频网站| 日精品一区二区| 国产精品久久精品日日| 日韩欧美亚洲一区二区| 色国产精品一区在线观看| 激情图区综合网| 亚洲国产wwwccc36天堂| 国产欧美综合在线| 欧美一二三在线| 欧美三级电影精品| 不卡视频一二三| 久久99久久精品| 亚洲国产乱码最新视频| 国产精品国产自产拍高清av王其| 日韩亚洲欧美在线| 欧美精品少妇一区二区三区| jlzzjlzz欧美大全| 狠狠色丁香久久婷婷综合丁香| 五月婷婷久久丁香| 一区二区三区高清| 中文字幕一区二区三区四区 | 久久久久久久久岛国免费| 在线免费不卡视频| 懂色av噜噜一区二区三区av | 亚洲激情在线激情| 国产校园另类小说区| 精品三级在线观看| 欧美久久久久久久久中文字幕| 99国产精品久久久| 成人动漫一区二区| 成人精品视频.| 成人永久免费视频| 国产成人在线色| 国产福利精品一区二区| 国产一区二区精品久久| 激情文学综合丁香| 国产精品自拍在线| 国产美女久久久久| 国产91精品一区二区麻豆亚洲| 国产综合久久久久久鬼色| 久草这里只有精品视频| 久久激情综合网| 九九视频精品免费| 激情欧美一区二区三区在线观看| 麻豆一区二区三| 激情av综合网| 成人精品国产福利| 波多野结衣在线aⅴ中文字幕不卡| 粗大黑人巨茎大战欧美成人| 成人午夜视频福利| 91社区在线播放| 精品视频资源站| 日韩午夜精品电影| 国产亚洲精久久久久久| 国产精品福利影院| 亚洲精品国产成人久久av盗摄| 亚洲一区二区三区激情| 午夜视频久久久久久| 免费欧美在线视频| 国产成a人亚洲精品| 91在线精品一区二区| 精品视频1区2区| 日韩视频一区二区在线观看| 国产欧美一区二区三区鸳鸯浴| 中文无字幕一区二区三区| 亚洲四区在线观看| 亚洲mv在线观看| 国内不卡的二区三区中文字幕| 国产不卡高清在线观看视频| 91美女精品福利| 欧美一区二区精品久久911| 久久久久国产免费免费 | 久久久精品综合| 综合av第一页| 日本在线不卡一区| 不卡的电影网站| 日韩一级片网址| 国产精品久久三区| 日本欧美一区二区三区| 成人深夜视频在线观看| 欧美午夜精品一区二区三区| 日韩免费性生活视频播放| 国产精品第一页第二页第三页| 亚洲mv在线观看| 国产91精品欧美| 欧美人xxxx| 国产精品久久二区二区| 男女视频一区二区| 99精品热视频| 国产亚洲欧洲一区高清在线观看| 一区二区三区日韩精品| 精品写真视频在线观看| 在线观看91精品国产入口| 26uuu亚洲综合色欧美| 亚洲午夜久久久| 成人永久免费视频| 欧美成人在线直播| 亚洲一区二区av在线| 丁香激情综合五月| 日韩一级片在线播放| 亚洲一区二区三区在线播放 | 91麻豆国产福利在线观看| 日韩三级在线观看| 亚洲综合视频在线| 东方欧美亚洲色图在线| 精品国产乱码久久久久久闺蜜| 亚洲国产日韩av| 在线日韩av片| 国产精品乱码人人做人人爱| 久草热8精品视频在线观看| 欧美日韩一级二级| 亚洲免费观看在线观看| 成熟亚洲日本毛茸茸凸凹| 日韩欧美在线一区二区三区| 亚洲小说春色综合另类电影| 99视频在线观看一区三区| 久久久久久久久岛国免费| 蜜桃在线一区二区三区| 欧美一级在线观看| 日韩精彩视频在线观看| 在线观看91精品国产麻豆| 一区二区三区不卡视频| 色综合久久久久综合体桃花网| 国产精品麻豆网站| 成人免费毛片aaaaa**| 国产日韩欧美不卡| 国产成人av网站| 国产欧美日韩综合精品一区二区 | 粉嫩蜜臀av国产精品网站| 26uuu国产电影一区二区| 韩国精品久久久| 久久久久久久久99精品| 国产成人综合自拍| 中文字幕 久热精品 视频在线| 成人午夜看片网址| 国产精品美女久久久久aⅴ| jlzzjlzz国产精品久久| 中文字幕一区二| 一本大道av一区二区在线播放| 亚洲日本一区二区| 欧美性猛交xxxx黑人交| 天天综合色天天| 日韩精品一区二区三区中文不卡| 久99久精品视频免费观看| 精品女同一区二区| 国产河南妇女毛片精品久久久| 国产清纯在线一区二区www| 成人爱爱电影网址| 亚洲综合色自拍一区| 欧美一区二区三级| 国产成人免费网站| 亚洲日本欧美天堂| 欧美精品日韩综合在线| 麻豆极品一区二区三区| 久久久精品人体av艺术| 97久久超碰国产精品电影| 午夜日韩在线观看| 2023国产精品自拍| 91亚洲精品一区二区乱码| 亚洲国产精品一区二区久久恐怖片| 欧美一级搡bbbb搡bbbb| 国产一区二区视频在线播放| 中文字幕一区二区不卡| 制服丝袜亚洲播放| 从欧美一区二区三区|