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

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

?? clhttprequest.pas

?? Clever_Internet_Suite_6.2的代碼 Clever_Internet_Suite_6.2的代碼 Clever_Internet_Suite_6.2的代碼
?? PAS
?? 第 1 頁 / 共 3 頁
字號:
{
  Clever Internet Suite Version 6.2
  Copyright (C) 1999 - 2006 Clever Components
  www.CleverComponents.com
}

unit clHttpRequest;

interface

{$I clVer.inc}

uses
  Classes, SysUtils, clHtmlParser, clStreams, clHttpHeader;

type
  TclHttpRequestItem = class;

  TclGetDataStreamEvent = procedure (Sender: TObject; AItem: TclHttpRequestItem;
    var AData: TStream) of object;

  TclDataAddedEvent = procedure (Sender: TObject; AItem: TclHttpRequestItem; AData: TStream) of object;

  TclGetFormNumberEvent = procedure(Sender: TObject; AParser: TclHtmlParser;
    var AFormNumber: Integer) of object;

  TclHttpRequest = class;
  
  TclHttpRequestItem = class(TPersistent)
  private
    FOwner: TclHttpRequest;
    FTag: Integer;
    FCanonicalized: Boolean;
    procedure SetOwner(const Value: TclHttpRequest);
    procedure SetCanonicalized(const Value: Boolean);
  protected
    procedure ReadData(Reader: TReader); virtual;
    procedure WriteData(Writer: TWriter); virtual;
    procedure ParseHeader(AHeader, AFieldList: TStrings); virtual;
    procedure AddData(const AData: PChar; ADataSize: Integer); virtual; abstract;
    procedure AfterAddData; virtual; abstract;
    function GetData: TStream; virtual; abstract;
    function GetSize: Integer;
    procedure BeginUpdate;
    procedure EndUpdate;
    procedure Update;
    function GetCanonicalizedValue(const AValue: string): string;
  public
    constructor Create(AOwner: TclHttpRequest); virtual;
    destructor Destroy; override;
    procedure Assign(Source: TPersistent); override;
    property Owner: TclHttpRequest read FOwner write SetOwner;
    property Tag: Integer read FTag write FTag;
    property Canonicalized: Boolean read FCanonicalized write SetCanonicalized;
  end;

  TclHttpRequestItemClass = class of TclHttpRequestItem;

  TclBinaryRequestItem = class(TclHttpRequestItem)
  protected
    procedure AddData(const AData: PChar; ADataSize: Integer); override;
    procedure AfterAddData; override;
    function GetData: TStream; override;
  end;

  TclTextRequestItem = class(TclHttpRequestItem)
  private
    FTextData: string;
    procedure SetTextData(const Value: string);
  protected
    procedure ReadData(Reader: TReader); override;
    procedure WriteData(Writer: TWriter); override;
    procedure AddData(const AData: PChar; ADataSize: Integer); override;
    procedure AfterAddData; override;
    function GetData: TStream; override;
  public
    procedure Assign(Source: TPersistent); override;
    property TextData: string read FTextData write SetTextData;
  end;

  TclFormFieldRequestItem = class(TclHttpRequestItem)
  private
    FFieldName: string;
    FFieldValue: string;
    function GetRequest: string;
    procedure SetFieldName(const Value: string);
    procedure SetFieldValue(const Value: string);
  protected
    procedure ReadData(Reader: TReader); override;
    procedure WriteData(Writer: TWriter); override;
    procedure AddData(const AData: PChar; ADataSize: Integer); override;
    procedure AfterAddData; override;
    function GetData: TStream; override;
  public
    procedure Assign(Source: TPersistent); override;
    property FieldName: string read FFieldName write SetFieldName;
    property FieldValue: string read FFieldValue write SetFieldValue;
  end;

  TclSubmitFileRequestItem = class(TclHttpRequestItem)
  private
    FFileName: string;
    FFieldName: string;
    FContentType: string;
    procedure SetContentType(const Value: string);
    procedure SetFieldName(const Value: string);
    procedure SetFileName(const Value: string);
  protected
    procedure ReadData(Reader: TReader); override;
    procedure WriteData(Writer: TWriter); override;
    procedure ParseHeader(AHeader, AFieldList: TStrings); override;
    procedure AddData(const AData: PChar; ADataSize: Integer); override;
    procedure AfterAddData; override;
    function GetData: TStream; override;
  public
    constructor Create(AOwner: TclHttpRequest); override;
    procedure Assign(Source: TPersistent); override;
    property FieldName: string read FFieldName write SetFieldName;
    property FileName: string read FFileName write SetFileName;
    property ContentType: string read FContentType write SetContentType;
  end;

  TclHttpRequest = class(TComponent)
  private
    FList: TList;
    FHeader: TclHttpRequestHeader;
    FOnChanged: TNotifyEvent;
    FOnGetDataStream: TclGetDataStreamEvent;
    FOnGetDataSourceStream: TclGetDataStreamEvent;
    FOnGetFormNumber: TclGetFormNumberEvent;
    FUpdateCount: Integer;
    FRequestSource: TStrings;
    FHeaderSource: TStrings;
    FIsParse: Boolean;
    FDataStream: TStream;
    FBatchSize: Integer;
    FOnDataAdded: TclDataAddedEvent;
    function GetTotalSize: Integer;
    function GetCount: Integer;
    function GetItem(Index: Integer): TclHttpRequestItem;
    procedure RemoveItem(AItem: TclHttpRequestItem);
    procedure AddItem(AItem: TclHttpRequestItem);
    procedure ClearItems;
    procedure ReadItems(Reader: TReader);
    procedure WriteItems(Writer: TWriter);
    procedure SetHeader(const Value: TclHttpRequestHeader);
    function GetFormField(const AFieldName: string): TclFormFieldRequestItem;
    procedure GetTotalRequestData(AStream: TclMultiStream);
    function GenerateBoundary: string;
    function GetRequestSource: TStrings;
    function GetHeaderSource: TStrings;
    procedure SetHeaderSource(const Value: TStrings);
    procedure ParseMultiPartRequest(AStream: TStream);
    procedure ParseFormField(const AFieldInfo: string);
    procedure ParseFormFieldRequest(const ASource: string);
    function GetRequestAsStream: TStream;
    procedure SetRequestAsStream(const Value: TStream);
    procedure SetRequestSource(const Value: TStrings);
    function ReadLine(AStream: TStream; AMaxBytes: Integer): string;
    procedure DoOnHeaderChanged(Sender: TObject);
    procedure InitBoundary;
    procedure ClearDataStream;
    function CreateMultiPartItem(const AHeader: string): TclHttpRequestItem;
  protected
    function IsMultiPart: Boolean;
    function IsForm: Boolean;
    function CreateHeader: TclHttpRequestHeader; virtual;
    function CreateItem(AHeader, AFieldList: TStrings): TclHttpRequestItem; virtual;
    procedure CreateSingleItem(AStream: TStream); virtual;
    function GetContentType: string; virtual;
    procedure InitHeader; virtual;
    procedure DefineProperties(Filer: TFiler); override;
    procedure DoGetDataStream(AItem: TclHttpRequestItem; var AData: TStream); dynamic;
    procedure DoGetDataSourceStream(AItem: TclHttpRequestItem; var AData: TStream); dynamic;
    procedure DoDataAdded(AItem: TclHttpRequestItem; AData: TStream); dynamic;
    procedure DoGetFormNumber(AParser: TclHtmlParser; var AFormNumber: Integer); dynamic;
    procedure Changed; dynamic;
    property DataStream: TStream read FDataStream write FDataStream;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Assign(Source: TPersistent); override;
    function Add(AItemClass: TclHttpRequestItemClass): TclHttpRequestItem;
    function AddBinaryData: TclBinaryRequestItem;
    function AddTextData(const ATextData: string): TclTextRequestItem;
    function AddSubmitFile(const AFileName: string): TclSubmitFileRequestItem; overload;
    function AddSubmitFile(const AFileName, AFieldName: string): TclSubmitFileRequestItem; overload;
    function AddFormField(const AFieldName, AFieldValue: string): TclFormFieldRequestItem;
    procedure Delete(Index: Integer);
    procedure Move(CurIndex, NewIndex: Integer);
    procedure Clear; virtual;
    procedure BeginUpdate;
    procedure EndUpdate;
    function BuildFormPostRequest(AParser: TclHtmlParser): string; overload;
    function BuildFormPostRequest(AParser: TclHtmlParser; AFormNumber: Integer): string; overload;
    function BuildFormPostRequest(AHtml: TStrings): string; overload;
    function BuildFormPostRequest(const AUrl: string): string; overload;
    property RequestSource: TStrings read GetRequestSource write SetRequestSource;
    property HeaderSource: TStrings read GetHeaderSource write SetHeaderSource;
    property RequestStream: TStream read GetRequestAsStream write SetRequestAsStream;
    property Items[Index: Integer]: TclHttpRequestItem read GetItem; default;
    property FormFields[const AFieldName: string]: TclFormFieldRequestItem read GetFormField;
    property Count: Integer read GetCount;
    property TotalSize: Integer read GetTotalSize;
  published
    property Header: TclHttpRequestHeader read FHeader write SetHeader;
    property BatchSize: Integer read FBatchSize write FBatchSize default 8192;
    property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
    property OnGetDataStream: TclGetDataStreamEvent read FOnGetDataStream write FOnGetDataStream;
    property OnGetDataSourceStream: TclGetDataStreamEvent read FOnGetDataSourceStream write FOnGetDataSourceStream;
    property OnDataAdded: TclDataAddedEvent read FOnDataAdded write FOnDataAdded;
    property OnGetFormNumber: TclGetFormNumberEvent read FOnGetFormNumber write FOnGetFormNumber;
  end;

procedure RegisterHttpRequestItem(AHeaderClass: TclHttpRequestItemClass);
function GetRegisteredHttpRequestItems: TList;

{$IFDEF DEMO}
{$IFNDEF IDEDEMO}
var
  IsHttpRequestDemoDisplayed: Boolean = False;
{$ENDIF}
{$ENDIF}

implementation

uses                         
  clWinInet, clDC, clUtils, Windows{$IFDEF DEMO}, Forms{$ENDIF};

const
  cFormDataContentType = 'application/x-www-form-urlencoded';
  cMultiPartContentType = 'multipart/form-data';

var
  RegisteredHttpRequestItems: TList = nil;

procedure RegisterHttpRequestItem(AHeaderClass: TclHttpRequestItemClass);
begin
  GetRegisteredHttpRequestItems().Add(AHeaderClass);
  Classes.RegisterClass(AHeaderClass);
end;

function GetRegisteredHttpRequestItems(): TList;
begin
  if (RegisteredHttpRequestItems = nil) then
  begin
    RegisteredHttpRequestItems := TList.Create();
  end;
  Result := RegisteredHttpRequestItems;
end;

{ TclHttpRequestItem }

procedure TclHttpRequestItem.Assign(Source: TPersistent);
begin
  if (Source is TclHttpRequestItem) then
  begin
    Canonicalized := TclHttpRequestItem(Source).Canonicalized;
  end else
  begin
    inherited Assign(Source);
  end;
end;

procedure TclHttpRequestItem.BeginUpdate;
begin
  if (Owner <> nil) then
  begin
    Owner.BeginUpdate();
  end;
end;

procedure TclHttpRequestItem.Update;
begin
  BeginUpdate();
  EndUpdate();
end;

constructor TclHttpRequestItem.Create(AOwner: TclHttpRequest);
begin
  inherited Create();
  SetOwner(AOwner);
  FCanonicalized := True;
end;

destructor TclHttpRequestItem.Destroy;
begin
  SetOwner(nil);
  inherited Destroy();
end;

procedure TclHttpRequestItem.EndUpdate;
begin
  if (Owner <> nil) then
  begin
    Owner.EndUpdate();
  end;
end;

procedure TclHttpRequestItem.ReadData(Reader: TReader);
begin
  BeginUpdate();
  try
    Canonicalized := Reader.ReadBoolean();
  finally
    EndUpdate();
  end;
end;

procedure TclHttpRequestItem.SetOwner(const Value: TclHttpRequest);
begin
  if (FOwner <> Value) then
  begin
    if (FOwner <> nil) then FOwner.RemoveItem(Self);
    FOwner := Value;
    if (FOwner <> nil) then FOwner.AddItem(Self);
  end;
end;

procedure TclHttpRequestItem.WriteData(Writer: TWriter);
begin
  Writer.WriteBoolean(Canonicalized);
end;

function TclHttpRequestItem.GetCanonicalizedValue(const AValue: string): string;
  function GetPos(const Substr, S: string): Integer;
  begin
    if LeadBytes = [] then
    begin
      Result := Pos(Substr, S);
    end else
    begin
      Result := AnsiPos(Substr, S);
    end;
  end;

const
  UnsafeChars = '+&*%<>"#{}|\^~[]''?!=/:$';
var
  i: Integer;
begin
  //TODO Canonicalized should be different for both multipart and formfield
  if (not Canonicalized) or ((Owner <> nil) and Owner.IsMultiPart()) then
  begin
    Result := AValue;
    Exit;
  end;
  
  Result := '';
  for i := 1 to Length(AValue) do
  begin
    if (GetPos(AValue[i], UnsafeChars) > 0) or (AValue[i] >= #$80) then
    begin
      Result := Result + '%' + IntToHex(Ord(AValue[i]), 2);
    end else
    if (AValue[i] = ' ') then
    begin
      Result := Result + '+';
    end else
    begin
      Result := Result + AValue[i];
    end;
  end
end;

procedure TclHttpRequestItem.SetCanonicalized(const Value: Boolean);
begin
  if (FCanonicalized <> Value) then
  begin
    FCanonicalized := Value;
    Update();
  end;
end;

function TclHttpRequestItem.GetSize: Integer;
var
  Stream: TStream;
begin
  Stream := GetData();
  try
    Result := Stream.Size;
  finally
    Stream.Free();
  end;
end;

procedure TclHttpRequestItem.ParseHeader(AHeader, AFieldList: TStrings);
begin
end;

{ TclHttpRequest }

function TclHttpRequest.GetContentType: string;
const
  RequestTypes: array[Boolean] of string = ('', cFormDataContentType);
var
  i: Integer;
  IsFormData: Boolean;
begin
  IsFormData := (Count > 0);
  for i := 0 to Count - 1 do
  begin
    if (Items[i] is TclSubmitFileRequestItem) then
    begin
      Result := cMultiPartContentType;
      Exit;
    end;
    IsFormData := IsFormData and (Items[i] is TclFormFieldRequestItem);
  end;
  Result := RequestTypes[IsFormData];
end;

procedure TclHttpRequest.AddItem(AItem: TclHttpRequestItem);
begin
  BeginUpdate();
  try
    FList.Add(AItem);
    if (not (csLoading in ComponentState)) and (not FIsParse) then
    begin
      Header.ContentType := GetContentType();
    end;
  finally
    EndUpdate();
  end;
end;

function TclHttpRequest.AddBinaryData: TclBinaryRequestItem;
begin
  BeginUpdate();
  try
    Result := Add(TclBinaryRequestItem) as TclBinaryRequestItem;
  finally
    EndUpdate();
  end;
end;

function TclHttpRequest.AddSubmitFile(const AFileName: string): TclSubmitFileRequestItem;
begin
  Result := AddSubmitFile(AFileName, 'FileName');
end;

function TclHttpRequest.AddFormField(const AFieldName, AFieldValue: string): TclFormFieldRequestItem;
begin
  BeginUpdate();
  try
    Result := Add(TclFormFieldRequestItem) as TclFormFieldRequestItem;
    Result.FieldName := AFieldName;
    Result.FieldValue := AFieldValue;
  finally
    EndUpdate();
  end;
end;

function TclHttpRequest.Add(AItemClass: TclHttpRequestItemClass): TclHttpRequestItem;
begin
  BeginUpdate();
  try
    Result := AItemClass.Create(Self);
  finally
    EndUpdate();
  end;
end;

function TclHttpRequest.AddTextData(const ATextData: string): TclTextRequestItem;
begin
  BeginUpdate();
  try
    Result := Add(TclTextRequestItem) as TclTextRequestItem;
    Result.TextData := ATextData;
  finally
    EndUpdate();
  end;
end;

procedure TclHttpRequest.Assign(Source: TPersistent);
var
  i: Integer;
  Item: TclHttpRequestItem;
begin
  if (Source is TclHttpRequest) then
  begin
    BeginUpdate();
    try
      Clear();
      for i := 0 to TclHttpRequest(Source).Count - 1 do
      begin
        Item := TclHttpRequest(Source).Items[i];
        Add(TclHttpRequestItemClass(Item.ClassType)).Assign(Item);
      end;
      Header.Assign(TclHttpRequest(Source).Header);
    finally
      EndUpdate();
    end;
  end else
  begin
    inherited Assign(Source);
  end;
end;

procedure TclHttpRequest.Clear;
begin
  BeginUpdate();
  try
    ClearItems();
    Header.Clear();
  finally
    EndUpdate();
  end;
end;

constructor TclHttpRequest.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FRequestSource := TStringList.Create();
  FHeaderSource := TStringList.Create();
  FList := TList.Create();
  FHeader := CreateHeader();
  FHeader.OnChanged := DoOnHeaderChanged;
  FBatchSize := 8192;
end;

function TclHttpRequest.CreateHeader: TclHttpRequestHeader;
begin
  Result := TclHttpRequestHeader.Create();
end;

procedure TclHttpRequest.DefineProperties(Filer: TFiler);
begin
  inherited DefineProperties(Filer);
  Filer.DefineProperty('Items', ReadItems, WriteItems, (FList.Count > 0));
end;

procedure TclHttpRequest.Delete(Index: Integer);
begin
  BeginUpdate();
  try
    FList.Delete(Index);
  finally
    EndUpdate();
  end;
end;

procedure TclHttpRequest.ClearDataStream;
begin
  FDataStream.Free();
  FDataStream := nil;
end;

destructor TclHttpRequest.Destroy;
begin
  ClearDataStream();
  ClearItems();
  FHeader.Free();
  FList.Free();
  FHeaderSource.Free();
  FRequestSource.Free();
  inherited Destroy();
end;

function TclHttpRequest.GetCount: Integer;
begin
  Result := FList.Count;
end;

function TclHttpRequest.GetItem(Index: Integer): TclHttpRequestItem;
begin
  Result := TclHttpRequestItem(FList[Index]);
end;

procedure TclHttpRequest.ReadItems(Reader: TReader);
var
  ItemClass: TclHttpRequestItemClass;
begin
  ClearItems();
  Reader.ReadListBegin();
  while not Reader.EndOfList() do
  begin
    ItemClass := TclHttpRequestItemClass(GetClass(Reader.ReadString()));
    if (ItemClass <> nil) then
    begin
      Add(ItemClass).ReadData(Reader);
    end;
  end;
  Reader.ReadListEnd();
end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色哟哟精品一区| 一本色道a无线码一区v| 99麻豆久久久国产精品免费| 欧美区视频在线观看| 久久免费电影网| 亚洲国产精品久久不卡毛片| 国产经典欧美精品| 在线成人小视频| 亚洲美女一区二区三区| 国产麻豆视频一区二区| 在线播放国产精品二区一二区四区| 欧美激情艳妇裸体舞| 黑人巨大精品欧美一区| 欧美日韩aaa| 一区二区高清视频在线观看| 国产成人8x视频一区二区| 日韩欧美亚洲一区二区| 亚洲一区免费观看| 91视频一区二区| 中文欧美字幕免费| 国产一区 二区 三区一级| 91精品国产手机| 午夜精品久久久久久久99水蜜桃| 91麻豆国产在线观看| 国产精品午夜久久| 国产成人av资源| 精品国产91乱码一区二区三区| 丝袜a∨在线一区二区三区不卡| 色欧美片视频在线观看在线视频| 日本一区二区动态图| 国产成人aaaa| 国产欧美日韩麻豆91| 成人sese在线| 椎名由奈av一区二区三区| 色综合一个色综合亚洲| 亚洲欧美日韩在线| 97久久精品人人澡人人爽| 久久成人免费网站| 天堂va蜜桃一区二区三区 | 日韩欧美在线1卡| 91在线一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 日韩高清国产一区在线| www国产成人免费观看视频 深夜成人网| 在线看国产日韩| 国产亚洲人成网站| 日本精品一级二级| 亚洲在线中文字幕| 欧美日韩国产高清一区| 奇米一区二区三区av| 精品国产污网站| 国产a级毛片一区| 国产精品久久久久久久久搜平片 | 中文字幕在线不卡| 91片黄在线观看| 天天影视网天天综合色在线播放| 日韩精品专区在线影院观看| 国产精品一区二区久久精品爱涩| 国产精品国产馆在线真实露脸 | 国产成人av电影| 亚洲激情图片小说视频| 欧美一区欧美二区| 高清在线成人网| 一区二区欧美国产| 精品播放一区二区| 91偷拍与自偷拍精品| 日本最新不卡在线| 国产精品免费视频一区| 欧美日韩不卡视频| 成人午夜av在线| 日韩国产一二三区| 欧美国产日韩一二三区| 欧美日韩精品欧美日韩精品一| 麻豆成人av在线| 亚洲精品你懂的| 久久久精品免费免费| 欧美色国产精品| 国产久卡久卡久卡久卡视频精品| 亚洲乱码中文字幕| 国产香蕉久久精品综合网| 精品视频在线免费看| 国产成人午夜精品影院观看视频| 亚洲bt欧美bt精品777| 欧美国产精品一区二区三区| 欧美精品18+| 在线视频国产一区| 一本大道久久a久久综合婷婷| 中文字幕精品在线不卡| 国产精品视频免费| 国产精品一线二线三线| 26uuu国产一区二区三区 | 欧美成人国产一区二区| 天天色综合天天| 91国产福利在线| 亚洲成人一区二区在线观看| 91同城在线观看| 亚洲综合区在线| a美女胸又www黄视频久久| 激情深爱一区二区| 免费在线一区观看| 亚洲国产精品一区二区www| 久久久99免费| 欧美成人激情免费网| 538prom精品视频线放| 欧美在线综合视频| 91欧美激情一区二区三区成人| 国产九色sp调教91| 国产一区二区不卡| 国产一级精品在线| 国产一区二区三区日韩| 久久成人18免费观看| 久久99最新地址| 久久成人综合网| 极品少妇xxxx精品少妇| 久草在线在线精品观看| 久久99精品国产91久久来源| 免费成人深夜小野草| 蜜臀久久99精品久久久久宅男| 亚洲va欧美va人人爽午夜| 亚洲高清不卡在线观看| 亚洲国产成人av网| 欧美性猛片xxxx免费看久爱 | 中文字幕在线观看不卡| 日本丶国产丶欧美色综合| 中文字幕日韩av资源站| 色噜噜夜夜夜综合网| 欧美日韩一卡二卡| 国产欧美精品一区二区三区四区| 国产很黄免费观看久久| 国产精品一区二区你懂的| 欧美中文字幕久久| 久久影院午夜片一区| 亚洲一区二区三区中文字幕在线| 国产在线精品一区二区| 欧美日韩中字一区| 成人av免费在线播放| 欧美成人福利视频| 国产久卡久卡久卡久卡视频精品| 久久久国产精华| 丝袜美腿亚洲综合| 91日韩精品一区| 国产日韩成人精品| 粉嫩一区二区三区性色av| 91精品国产综合久久精品麻豆| 亚洲丝袜美腿综合| 国产成人免费在线观看不卡| 欧美肥大bbwbbw高潮| 国产毛片一区二区| 成人综合在线观看| 8x8x8国产精品| 一区二区在线电影| 99热这里都是精品| 久久亚洲精品小早川怜子| 亚洲风情在线资源站| 99久久99久久久精品齐齐| 国产日韩av一区二区| 国产乱子伦一区二区三区国色天香| 欧美日韩精品免费观看视频| 亚洲在线中文字幕| 欧洲人成人精品| 一区二区三区在线视频观看 | 综合在线观看色| 国产成人aaaa| 国产蜜臀av在线一区二区三区| 韩国成人福利片在线播放| 日韩亚洲欧美一区二区三区| 偷拍亚洲欧洲综合| 欧美日韩国产一级二级| 偷拍与自拍一区| 91麻豆精品国产91| 蓝色福利精品导航| 日韩欧美一级二级| 国产在线国偷精品免费看| 久久久久久久综合狠狠综合| 久久99精品久久久久久| 久久色视频免费观看| 国产91精品一区二区麻豆网站| 中文字幕av不卡| 色域天天综合网| 午夜激情一区二区| 欧美videofree性高清杂交| 麻豆精品在线观看| 久久―日本道色综合久久| 国产精品1区2区3区在线观看| 国产欧美日韩三级| 91欧美一区二区| 亚洲国产精品久久一线不卡| 欧美高清精品3d| 国产一区视频网站| 中文字幕国产一区二区| 91影院在线免费观看| 亚洲成人手机在线| 精品美女在线播放| 波多野结衣中文字幕一区二区三区| 国产精品久久久久毛片软件| 欧美影院一区二区三区| 久久精品亚洲乱码伦伦中文| 91精品国产一区二区三区香蕉| 欧洲精品视频在线观看| 久久久久久电影|