青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

路漫漫,長修遠,我們不能沒有錢
隨筆 - 173, 文章 - 0, 評論 - 257, 引用 - 0
數據加載中……

起因源于之前忘記一個adsl的端口,想寫一個端口探測工具,止于sp的訂購關系包檢測

雖然只有這么點東西,但我還是做了3天,老了

 一個sp用的wap訂購關系包調試檢測工具

 

/** 程序的核心,一個post線程,用于提交xml數據包

*   作者:劉昆

*   最后修改日期:  2004-9-23 

*   以上代碼免費,若直接引用一下代碼請告知,并保留此注釋

*   作為一名程序員應該有最基本的職業道德*/

unit HTTPGetThread;

interface
uses classes, SysUtils, wininet, windows;


type
  TOnProgressEvent = procedure(TotalSize, Readed: Integer) of object;


  THTTPGetThread = class(TThread)

  private
    FTAcceptTypes: string; //接收文件類型 *.*
    FTAgent: string; //瀏覽器名  Nokia6610/1.0 (5.52) Profile/MIDP-1.0 Configuration/CLDC-1.02
    FTURL: string; // url
    FTFileName: string; //文件名
    FTStringResult: AnsiString;
    FTUserName: string; //用戶名
    FTPassword: string; //密碼
    FTPostQuery: string; //方法名,post或者get
    FTReferer: string;
    FTBinaryData: Boolean;
    FTUseCache: Boolean; //是否從緩存讀數據
    FTMimeType: string; //Mime類型

    FTResult: Boolean;
    FTFileSize: Integer;
    FTToFile: Boolean; //是否文件

    BytesToRead, BytesReaded: LongWord;

    FTProgress: TOnProgressEvent;
    procedure ParseURL(URL: string; var HostName, FileName: string; var portNO: integer); //取得url的主機名和文件名
    procedure UpdateProgress;
  protected
    procedure Execute; override;
  public
    procedure setResult(FResult: boolean);
    function getResult(): boolean;
    function getFileName(): string;
    function getToFile(): boolean;
    function getFileSize(): integer;
    function getStringResult(): AnsiString;
    constructor Create(aAcceptTypes, aMimeType, aAgent, aURL, aFileName, aUserName, aPassword, aPostQuery, aReferer: string; aBinaryData, aUseCache: Boolean; aProgress: TOnProgressEvent; aToFile: Boolean);

  end;

implementation

{ THTTPGetThread }

constructor THTTPGetThread.Create(aAcceptTypes, aMimeType, aAgent, aURL, aFileName, aUserName, aPassword, aPostQuery, aReferer: string; aBinaryData, aUseCache: Boolean; aProgress: TOnProgressEvent; aToFile: Boolean);
begin
  FreeOnTerminate := True;
  inherited Create(True);

  FTAcceptTypes := aAcceptTypes;
  FTAgent := aAgent;
  FTURL := aURL;
  FTFileName := aFileName;
  FTUserName := aUserName;
  FTPassword := aPassword;

  //FTPostQuery := aPostQuery;

  FTPostQuery := StringReplace(aPostQuery, #13#10, '', [rfReplaceAll]);

  FTReferer := aReferer;
  FTProgress := aProgress;
  FTBinaryData := aBinaryData;
  FTUseCache := aUseCache;
  FTMimeType := aMimeType;

  FTToFile := aToFile;
  Resume;
end;

procedure THTTPGetThread.Execute;
var
  hSession: hInternet; //回話句柄
  hConnect: hInternet; //連接句柄
  hRequest: hInternet; //請求句柄
  Host_Name: string; //主機名
  File_Name: string; //文件名
  port_no: integer;

  RequestMethod: PChar;
  InternetFlag: longWord;
  AcceptType: PAnsiChar;
  dwBufLen, dwIndex: longword;
  Buf: Pointer; //緩沖區
  f: file;
  Data: array[0..$400] of Char;
  TempStr: AnsiString;
  mime_Head: string;

  procedure CloseHandles;
  begin
    InternetCloseHandle(hRequest);
    InternetCloseHandle(hConnect);
    InternetCloseHandle(hSession);
  end;

begin
  inherited;
  buf := nil;
  try
    try
      ParseURL(FTURL, Host_Name, File_Name, port_no);

      if Terminated then begin
        FTResult := False;
        Exit;
      end;
     //建立會話
      hSession := InternetOpen(pchar(FTAgent), //lpszCallerName指定正在使用網絡函數的應用程序
        INTERNET_OPEN_TYPE_PRECONFIG, //參數dwAccessType指定訪問類型
        nil, //服務器名(lpszProxyName)。 accesstype為GATEWAY_PROXY_INTERNET_ACCESS和CERN_PROXY_ACCESS時
        nil, //NProxyPort參數用在CERN_PROXY_INTERNET_ACCESS中用來指定使用的端口數。使用INTERNET_INVALID_PORT_NUMBER相當于提供卻省的端口數。
        0); //設置額外的選擇。你可以使用INTERNET_FLAG_ASYNC標志去指示使用返回句句柄的將來的Internet函數將為回調函數發送狀態信息,使用InternetSetStatusCallback進行此項設置

     //建立連接
      hConnect := InternetConnect(hSession, //會話句柄
        PChar(Host_Name), //指向包含Internet服務器的主機名稱(如
http://www.mit.edu)或IP地址(如202.102.13.141)的字符串
        port_no, //INTERNET_DEFAULT_HTTP_PORT, //是將要連結到的TCP/IP的端口號
        PChar(FTUserName), //用戶名
        PChar(FTPassword), //密碼
        INTERNET_SERVICE_HTTP, //協議
        0, // 可選標記,設置為INTERNET_FLAG_SECURE,表示使用SSL/PCT協議完成事務
        0); //應用程序定義的值,用來為返回的句柄標識應用程序設備場境

      if FTPostQuery = '' then RequestMethod := 'GET'
      else RequestMethod := 'POST';

      if FTUseCache then InternetFlag := 0
      else InternetFlag := INTERNET_FLAG_RELOAD;

      AcceptType := PChar('Accept: ' + FTAcceptTypes);

    //建立一個http請求句柄
      hRequest := HttpOpenRequest(hConnect, //InternetConnect返回的HTTP會話句柄
        RequestMethod, //指向在申請中使用的"動詞"的字符串,如果設置為NULL,則使用"GET"
        PChar(File_Name), //指向包含動詞的目標對象名稱的字符串,通常是文件名稱、可執行模塊或搜索說明符
        'HTTP/1.0', //指向包含HTTP版本的字符串,如果為NULL,則默認為"HTTP/1.0";
        PChar(FTReferer), //指向包含文檔地址(URL)的字符串,申請的URL必須是從該文檔獲取的
        @AcceptType, //指向客戶接收的內容的類型
        InternetFlag,
        0);
      mime_Head := 'Content-Type: ' + FTMimeType;
      if FTPostQuery = '' then
        FTResult := HttpSendRequest(hRequest, nil, 0, nil, 0)
      else
    //發送一個指定請求到httpserver
        FTResult := HttpSendRequest(hRequest,
          pchar(mime_Head), //mime 頭
          length(mime_Head), //頭長度
          PChar(FTPostQuery), //附加數據緩沖區,可為空
          strlen(PChar(FTPostQuery))); //附加數據緩沖區長度

      if Terminated then
      begin
      //CloseHandles;
        FTResult := False;
        Exit;
      end;

      dwIndex := 0;
      dwBufLen := 1024;
      GetMem(Buf, dwBufLen);

    //接收header信息和一個http請求
      FTResult := HttpQueryInfo(hRequest,
        HTTP_QUERY_CONTENT_LENGTH,
        Buf, //指向一個接收請求信息的緩沖區的指針
        dwBufLen, //HttpQueryInfo內容的大小
        dwIndex); //讀取的字節數

      if Terminated then begin
        FTResult := False;
        Exit;
      end;

      if FTResult or not FTBinaryData then begin //如果請求
        if FTResult then
          FTFileSize := StrToInt(StrPas(Buf));

        BytesReaded := 0;

        if FTToFile then begin
          AssignFile(f, FTFileName);
          Rewrite(f, 1);
        end else FTStringResult := '';

        while True do begin
          if Terminated then begin
            FTResult := False;
            Exit;
          end;

          if not InternetReadFile(hRequest,
            @Data, //數據內容
            SizeOf(Data), //大小
            BytesToRead) //讀取的字節數
            then Break
          else
            if BytesToRead = 0 then Break
            else begin
              if FTToFile then
                BlockWrite(f, Data, BytesToRead) //將讀出的數據寫入文件
              else begin
                TempStr := Data;
                SetLength(TempStr, BytesToRead);
                FTStringResult := FTStringResult + TempStr;
              end;

              inc(BytesReaded, BytesToRead);

              if Assigned(FTProgress) then //執行回調函數
                Synchronize(UpdateProgress);

            end;
        end;

        if FTToFile then
          FTResult := FTFileSize = Integer(BytesReaded)
        else begin
         // SetLength(FTStringResult, BytesReaded);
          FTResult := BytesReaded <> 0;
        end;

      end;
    except
    end;
  finally
    if FTToFile then CloseFile(f);

    if assigned(Buf) then FreeMem(Buf);
    CloseHandles;
  end;
end;

 

function THTTPGetThread.getFileName: string;
begin
  result := FTFileName;
end;

function THTTPGetThread.getFileSize: integer;
begin
  result := FTFileSize;
end;

function THTTPGetThread.getResult: boolean;
begin
  result := FTResult;
end;

function THTTPGetThread.getStringResult: AnsiString;
begin
  result := FTStringResult;
end;

function THTTPGetThread.getToFile: boolean;
begin
  result := FTToFile;
end;

procedure THTTPGetThread.ParseURL(URL: string; var HostName, FileName: string; var portNO: integer);
var
  i: Integer;
begin
  if Pos('http://', LowerCase(URL)) <> 0 then
    Delete(URL, 1, 7);

  i := Pos('/', URL);
  HostName := Copy(URL, 1, i);
  FileName := Copy(URL, i, Length(URL) - i + 1);

  i := pos(':', hostName);
  if i <> 0 then begin
    portNO := strtoint(copy(hostName, i + 1, length(hostName) - i - 1));
    hostName := copy(hostName, 1, i - 1);
  end else portNO := 80;

  if (Length(HostName) > 0) and (HostName[Length(HostName)] = '/') then SetLength(HostName, Length(HostName) - 1);
end;


procedure THTTPGetThread.setResult(FResult: boolean);
begin
  FTResult := FResult;
end;

procedure THTTPGetThread.UpdateProgress;
begin
  FTProgress(FTFileSize, BytesReaded);
end;

end.

 

/** 主要用來做線程和界面的交互

*   作者:劉昆

*   最后修改日期:  2004-9-23 

*   以上代碼免費,若直接引用一下代碼請告知,并保留此注釋

*   作為一名程序員應該有最基本的職業道德*/

unit MyHttpGet;

interface

uses HTTPGetThread, windows;

type
  TOnDoneFileEvent = procedure(FileName: string; FileSize: Integer) of object;
  TOnDoneStringEvent = procedure(Result: AnsiString) of object;


  THttpGet = class
  private
    F_URL: string; //目標url
    F_GetURLThread: THTTPGetThread; //取數據的線程

    F_Accept_Types: string;
    F_Agent: string;
    F_Binary_Data: Boolean;
    F_Use_Cache: Boolean; //是否讀緩存
    F_File_Name: string;
    F_User_Name: string; //用戶名
    F_Password: string; //密碼
    F_PostQuery: string; //方法名
    F_Referer: string;
    F_Mime_Type: string;

    F_Wait_Thread: Boolean;

    FResult: Boolean;

    FProgress: TOnProgressEvent;
    FDoneFile: TOnDoneFileEvent;
    FDoneString: TOnDoneStringEvent;

    procedure ThreadDone(Sender: TObject);

  public
    constructor Create();
    destructor Destroy(); override;
    procedure getFile();
    procedure GetString();
    procedure Abort();
  published
    property WaitThread: Boolean read F_Wait_Thread write F_Wait_Thread;
    property AcceptTypes: string read F_Accept_Types write F_Accept_Types;
    property Agent: string read F_Agent write F_Agent;
    property BinaryData: Boolean read F_Binary_Data write F_Binary_Data;
    property URL: string read F_URL write F_URL;
    property UseCache: Boolean read F_Use_Cache write F_Use_Cache;
    property FileName: string read F_File_Name write F_File_Name;
    property UserName: string read F_User_Name write F_User_Name;
    property Password: string read F_Password write F_Password;
    property PostQuery: string read F_PostQuery write F_PostQuery;
    property Referer: string read F_Referer write F_Referer;
    property MimeType: string read F_Mime_Type write F_Mime_Type;

    property OnDoneFile: TOnDoneFileEvent read FDoneFile write FDoneFile;
    property OnDoneString: TOnDoneStringEvent read FDoneString write FDoneString;
  end;

implementation

 

{ THttpGet }

procedure THttpGet.Abort;
begin
  if Assigned(F_GetURLThread) then
  begin
    F_GetURLThread.Terminate;
    F_GetURLThread.setResult(false);
  end;
end;

constructor THttpGet.Create;
begin
  F_Accept_Types := '*/*';
  F_Agent := 'Nokia6610/1.0 (5.52) Profile/MIDP-1.0 Configuration/CLDC-1.02';
end;

destructor THttpGet.Destroy;
begin

end;

procedure THttpGet.getFile;
var
  Msg: TMsg;
begin
  if not Assigned(F_GetURLThread) then
  begin
    F_GetURLThread := THTTPGetThread.Create(F_Accept_Types,F_Mime_Type, F_Agent, F_URL, F_File_Name, F_User_Name, F_Password, F_PostQuery, F_Referer, F_Binary_Data, F_Use_Cache, FProgress, true);
    F_GetURLThread.OnTerminate := ThreadDone;
    if F_Wait_Thread then
      while Assigned(F_GetURLThread) do
        while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
        begin
          TranslateMessage(Msg);
          DispatchMessage(Msg);
        end;
  end
end;

procedure THttpGet.GetString;
var
  Msg: TMsg;
begin
  if not Assigned(F_GetURLThread) then
  begin
    F_GetURLThread := THTTPGetThread.Create(F_Accept_Types,F_Mime_Type,F_Agent, F_URL, F_File_Name, F_User_Name, F_Password, F_PostQuery, F_Referer, F_Binary_Data, F_Use_Cache, FProgress, False);
    F_GetURLThread.OnTerminate := ThreadDone;
    if F_Wait_Thread then
      while Assigned(F_GetURLThread) do
        while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
          TranslateMessage(Msg);
          DispatchMessage(Msg);
        end;
  end
end;

procedure THttpGet.ThreadDone(Sender: TObject);
begin
  FResult := F_GetURLThread.getResult;
  if FResult then
    if F_GetURLThread.getToFile then begin
      if Assigned(FDoneFile) then FDoneFile(F_GetURLThread.getFileName, F_GetURLThread.getFileSize)
    end else
      if Assigned(FDoneString) then FDoneString(F_GetURLThread.getStringResult);

    //end else if Assigned(FError) then FError(Self);
  F_GetURLThread := nil;
end;

end.

 

/** 程序主界面

*   作者:劉昆

*   最后修改日期:  2004-9-23 

*   以上代碼免費,若直接引用一下代碼請告知,并保留此注釋

*   作為一名程序員應該有最基本的職業道德*/

unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, MyHttpGet;

type
  TMain = class(TForm)
    Panel1: TPanel;
    Edit1: TEdit;
    Label1: TLabel;
    Panel2: TPanel;
    Panel3: TPanel;
    GroupBox1: TGroupBox;
    MeSend: TMemo;
    GroupBox2: TGroupBox;
    MeReceive: TMemo;
    Button1: TButton;
    CbSave: TCheckBox;
    Edit2: TEdit;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure onGetString(Result: AnsiString);
    procedure onGetFile(FileName: string; FileSize: Integer);

  public
    { Public declarations }
  end;

var
  Main: TMain;

implementation

{$R *.dfm}


procedure TMain.Button1Click(Sender: TObject);
var hg: THttpGet;
  strs: TStrings;
  i: Integer;
begin
  hg := nil;
  strs := nil;
  try
    strs := TStringList.Create;
    hg := THttpGet.Create;
    hg.WaitThread := false;
    hg.AcceptTypes := '*.*';

    hg.Agent := 'Nokia6610/1.0 (5.52) Profile/MIDP-1.0 Configuration/CLDC-1.02';
    hg.BinaryData := false;
    hg.URL := 'Http://' + Edit1.Text;
    hg.UseCache := false;
    hg.FileName := 'provison.xml';
    hg.UserName := '';
    hg.Password := '';

    for i := 0 to MeSend.Lines.Count - 1 do
      strs.Add(trim(MeSend.Lines[i]));

    hg.PostQuery := strs.Text;
    hg.Referer := 'Http://' + Edit1.Text; //text/plain
    hg.MimeType := Edit2.Text;
    hg.OnDoneString := onGetString;
    hg.OnDoneFile := onGetFile;

    hg.GetString;
  finally
    strs.Free;
    hg.Free;
  end;
end;


procedure TMain.onGetFile(FileName: string; FileSize: Integer);
begin

end;

procedure TMain.onGetString(Result: AnsiString);
begin
  MeReceive.Lines.Text := Result;
end;

end.



posted on 2004-11-12 03:25 Khan 閱讀(834) 評論(0)  編輯 收藏 引用 所屬分類: Delphi

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产婷婷成人久久av免费高清 | 欧美国产精品人人做人人爱| 99re6这里只有精品视频在线观看 99re6这里只有精品 | 欧美一区二区在线免费播放| 亚洲无限av看| 午夜精品久久久久影视| 欧美一区二区黄色| 久久国产精品毛片| 蜜臀va亚洲va欧美va天堂| 亚洲国产mv| 欧美插天视频在线播放| 亚洲日本成人网| 亚洲午夜激情免费视频| 欧美一区二区高清在线观看| 久久久久久欧美| 欧美黑人多人双交| 国产精品入口66mio| 激情久久影院| 亚洲人成久久| 欧美亚洲一区二区在线| 蜜臀久久99精品久久久画质超高清 | 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲视频一区在线| 久久琪琪电影院| 日韩一区二区福利| 久久久综合网站| 国产精品视频免费在线观看| 国产一区欧美| 亚洲一区一卡| 亚洲国产精品成人精品| 小黄鸭精品密入口导航| 欧美二区在线播放| 精品盗摄一区二区三区| 亚洲——在线| 亚洲国产精品久久久| 欧美一区2区三区4区公司二百| 欧美片在线观看| 狠狠色狠狠色综合日日tαg | 99pao成人国产永久免费视频| 久久久久久网| 亚洲综合国产激情另类一区| 欧美大成色www永久网站婷| 国产欧美日韩免费| 亚洲影院高清在线| 亚洲精品久久久久久久久久久久| 欧美一区二区三区在线免费观看| 欧美日韩国产一级片| 亚洲区中文字幕| 欧美激情1区| 正在播放亚洲| 国产一区二区观看| 亚洲欧美国产精品va在线观看 | 蜜桃视频一区| 性欧美xxxx大乳国产app| 欧美日韩亚洲另类| 9i看片成人免费高清| 欧美高清视频一二三区| 久久久久久久网站| 激情综合色综合久久| 久久精品久久综合| 亚洲一区二区三区色| 国产精品免费小视频| 亚洲直播在线一区| 亚洲天堂av图片| 国产精品日本| 午夜视频一区| 午夜久久久久久| 国产裸体写真av一区二区| 欧美一区二区三区日韩视频| 亚洲综合激情| 国产日本欧洲亚洲| 免费观看成人www动漫视频| 久久久久久久久久久久久女国产乱| 韩国一区电影| 欧美.com| 欧美日韩岛国| 亚洲免费综合| 欧美一级视频免费在线观看| 精品91在线| 91久久久一线二线三线品牌| 欧美伦理在线观看| 亚洲自拍高清| 久久婷婷亚洲| 日韩视频在线播放| 一区二区av在线| 国产精品综合| 欧美激情综合色| 国产精品多人| 快射av在线播放一区| 久久成人免费视频| 亚洲大胆女人| 亚洲人成欧美中文字幕| 欧美日韩精品欧美日韩精品| 久久国产欧美日韩精品| 美女精品视频一区| 亚洲欧美日本另类| 久久天天狠狠| 亚洲免费一级电影| 免费视频亚洲| 久久成人亚洲| 欧美日韩国产在线| 久久狠狠一本精品综合网| 另类激情亚洲| 欧美有码在线视频| 欧美大片一区二区三区| 亚洲女优在线| 欧美精品高清视频| 久久综合色影院| 欧美日韩精品中文字幕| 久久久夜色精品亚洲| 欧美日韩午夜剧场| 欧美日韩午夜精品| 亚洲小说欧美另类婷婷| 国产一区二区看久久| 亚洲精品久久久久久久久久久久| 国产亚洲人成网站在线观看| 亚洲精品中文字幕有码专区| 国产专区一区| 亚洲欧美国内爽妇网| 一本大道久久a久久综合婷婷 | 亚洲一级影院| 日韩一区二区电影网| 久久久久久久97| 香蕉精品999视频一区二区 | 久久久久国产精品厨房| 亚洲欧美视频一区二区三区| 欧美阿v一级看视频| 麻豆精品网站| 加勒比av一区二区| 欧美一区二区观看视频| 欧美在线视频导航| 国产精品盗摄久久久| 99精品视频一区二区三区| 亚洲免费不卡| 欧美精品在线一区二区三区| 亚洲国产高清视频| 亚洲伦伦在线| 欧美精品亚洲二区| 99在线热播精品免费99热| 日韩西西人体444www| 欧美精品啪啪| 99精品视频一区| 午夜精品久久久| 国产色爱av资源综合区| 久久精品道一区二区三区| 巨乳诱惑日韩免费av| 亚洲国产美女精品久久久久∴| 免费成人高清视频| 亚洲精品免费一区二区三区| 亚洲伊人一本大道中文字幕| 国产精品国色综合久久| 午夜精品久久久久久久99水蜜桃| 久久精品91久久久久久再现| 精品999在线观看| 欧美电影免费网站| 亚洲最黄网站| 久久免费黄色| 亚洲美女尤物影院| 国产精品伦一区| 久久大逼视频| 亚洲日本在线观看| 午夜在线观看欧美| 国产一区二区三区黄| 美女国内精品自产拍在线播放| 日韩西西人体444www| 欧美一级淫片播放口| 极品中文字幕一区| 欧美日韩亚洲一区二区三区| 亚洲欧美精品伊人久久| 久久午夜视频| 亚洲精品视频一区| 国产欧美成人| 欧美成人r级一区二区三区| 夜夜嗨av一区二区三区四季av | 狠狠狠色丁香婷婷综合激情| 久久久久久网| 一区二区三区久久精品| 久久久久久精| 在线一区二区三区四区五区| 国产精品综合| 欧美精品一区二区精品网| 亚洲午夜激情| 亚洲激情国产精品| 久久午夜电影网| 午夜精品久久久久久久久久久| 国产日韩欧美夫妻视频在线观看| 欧美黄色免费| 久久免费国产精品1| 亚洲视频电影在线| 亚洲国产精品视频一区| 久久精品免视看| 亚洲一区二区三区视频播放| 亚洲黄色尤物视频| 国内外成人在线视频| 欧美日韩国产在线一区| 老司机免费视频一区二区| 午夜性色一区二区三区免费视频 | 久久riav二区三区| 亚洲视频免费在线观看| 亚洲人精品午夜|