接上一篇 阿里媽媽帳號登陸狀態如何長時間保存html
既然咱們獲取到了cookie, 若是有多個程序都要使用到聯盟賬號的時候, 若是不共享cookie, 那麼每一個程序都須要登陸一次, 真的很浪費資源.服務器
如何共享呢, 那就是創建一個http的服務, 提供http的接口.cookie
如代碼所示:spa
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, diocp.ex.httpServer, ExtCtrls, ShellAPI; type TFrmMain = class(TForm) Button1: TButton; Edit1: TEdit; mmo1: TMemo; pnl1: TPanel; btn1: TButton; tmr1: TTimer; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btn1Click(Sender: TObject); procedure tmr1Timer(Sender: TObject); private { Private declarations } FTcpServer: TDiocpHttpServer; procedure OnHttpSvrRequest(pvRequest:TDiocpHttpRequest); procedure StartLogin(); function AtractProcess(sExe: string): Boolean; public { Public declarations } end; var FrmMain: TFrmMain; implementation uses uFMMonitor, diocp.core.engine; {$R *.dfm}procedure TFrmMain.Button1Click(Sender: TObject); var MOduleHandle:THandle; TmpWndHandle:THandle; aa:PChar; begin TmpWndHandle:=0; aa:=PChar(Edit1.Text); TmpWndHandle:=FindWindowA(nil,aa); if not IsWindow(TmpWndHandle) then begin mmo1.Lines.Add('沒有找到窗口'); Exit; end; if InstallHook(FindWindowA(nil,aa)) then mmo1.Lines.Add('掛載成功') end; procedure TFrmMain.FormDestroy(Sender: TObject); begin UnHook; end; procedure TFrmMain.OnHttpSvrRequest(pvRequest: TDiocpHttpRequest); var FLoad: TStringList; begin try pvRequest.Response.ContentType := 'text/html; charset=utf-8'; pvRequest.DecodePostDataParam(false); pvRequest.DecodeURLParam(false); if pvRequest.RequestURI = '/GetCookie' then begin FLoad := TStringList.Create; if FileExists(ExtractFilePath(ParamStr(0))+'cook.txt') then FLoad.LoadFromFile(ExtractFilePath(ParamStr(0))+'cook.txt'); pvRequest.Response.WriteString(FLoad.Text); FreeAndNil(FLoad); end else pvRequest.Response.WriteString('未知命令'); finally pvRequest.ResponseEnd; pvRequest.CloseContext; end; end; procedure TFrmMain.FormCreate(Sender: TObject); begin FTcpServer := TDiocpHttpServer.Create(Self); FTcpServer.Name := 'HttpSVR'; FTcpServer.SetMaxSendingQueueSize(10000); FTcpServer.createDataMonitor; FTcpServer.OnDiocpHttpRequest := OnHttpSvrRequest; TFMMonitor.createAsChild(pnl1, FTcpServer); FTcpServer.Port := 9093; FTcpServer.Active := True; end; procedure TFrmMain.StartLogin; var scmd, sPath: string; begin sCmd := '-lt 1 -ac -ap -dc -dp -pn AL6362845535841316741047753041'; sPath := ExtractFilePath(ParamStr(0)); ShellExecute(0, 'open', PChar(sPath+'AliLogin.exe'), PChar(sCmd), nil, SW_SHOWNORMAL); tmr1.Enabled := True; end; procedure TFrmMain.btn1Click(Sender: TObject); begin StartLogin(); end; function TFrmMain.AtractProcess(sExe: string): Boolean; var MOduleHandle:THandle; TmpWndHandle:THandle; aa:PChar; begin Result := False; TmpWndHandle:=0; aa:=PChar(sExe); TmpWndHandle:=FindWindowA(nil,aa); if not IsWindow(TmpWndHandle) then begin mmo1.Lines.Add('沒有找到窗口'); Exit; end; if InstallHook(FindWindowA(nil,aa)) then begin mmo1.Lines.Add('掛載成功'); Result := True; end; end; procedure TFrmMain.tmr1Timer(Sender: TObject); begin if AtractProcess('阿里媽媽登陸窗體') then tmr1.Enabled := False; end; end.
咱們把注入獲取的cookie保存在cook.txt文件中, 當服務器開啓後, 調用接口 http://服務器IP:9091/GetCookie?code
在這個http服務中, 使用的是開源的diocp, 使用起來很簡單.orm
下節預告 如何獲取單品優惠券htm