小编Ste*_*veL的帖子

Indy - IdHttp如何处理页面重定向?

使用:Delphi 2010,Indy的最新版本

我试图从Googles Adsense网页上删除数据,目的是获取报告.但到目前为止我还没有成功.它在第一次请求后停止,但不继续.

使用Fiddler调试流向Google Adsense网站的流量/请求,以及用于加载Adsense页面的Web浏览器,我可以看到请求(来自webbrowser)会生成许多重定向,直到页面加载完毕.

但是,我的Delphi应用程序只在停止之前生成一些请求.

以下是我遵循的步骤:

  1. 在表单上删除IdHTTP和IdSSLIOHandlerSocketOpenSSL1组件.
  2. 将IdHTTP组件属性AllowCookies和HandleRedirects设置为True,将IOHandler属性设置为IdSSLIOHandlerSocketOpenSSL1.
  3. 设置IdSSLIOHandlerSocketOpenSSL1组件属性方法:='sslvSSLv23'

最后我有这个代码:

procedure TfmMain.GetUrlToFile(AURL, AFile : String);
var
 Output : TMemoryStream;
begin
  Output := TMemoryStream.Create;
  try
    IdHTTP1.Get(FURL, Output);
    Output.SaveToFile(AFile);
  finally
    Output.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

但是,它没有按预期进入登录页面.我希望它表现得好像它是一个webbrowser并继续重定向,直到找到最后一页.

这是Fiddler标题的输出:

HTTP/1.1 302 Found
Location: https://encrypted.google.com/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=5166063f01b64b03:FF=0:TM=1293571783:LM=1293571783:S=a5OtsOqxu_GiV3d6; expires=Thu, 27-Dec-2012 21:29:43 GMT; path=/; domain=.google.com
Set-Cookie: NID=42=XFUwZdkyF0TJKmoJjqoGgYNtGyOz-Irvz7ivao2z0--pCBKPpAvCGUeaa5GXLneP41wlpse-yU5UuC57pBfMkv434t7XB1H68ET0ZgVDNEPNmIVEQRVj7AA1Lnvv2Aez; expires=Wed, 29-Jun-2011 21:29:43 GMT; path=/; domain=.google.com; HttpOnly
Date: Tue, 28 Dec 2010 21:29:43 GMT
Server: gws
Content-Length: 226
X-XSS-Protection: 1; mode=block

首先,这个输出有什么问题吗?

还有什么我应该做的让IdHTTP组件继续追求重定向直到最后一页?

delphi indy web-scraping

8
推荐指数
1
解决办法
2万
查看次数

将SID翻译成名称

我的Delphi 2010应用程序需要将Windows用户添加到本地Administrators组.我使用NetLocalGroupAddMembers使这部分工作.

现在,应用程序需要在Windows的本地化版本中使用其他语言.为此,我使用带有LsaLookupSids函数的SID来获取组的已翻译名称,但由于我不知道如何进行API调用而无法执行此操作.

我很感激有人可以告诉我如何使用LsaLookupSids函数从SID获取组名(英文版美国版Windows中的"Administrators").

以下是我的代码:

function AddUser(const username, password: PChar; resetpassword: boolean): boolean; stdcall;
var
  NetApiStatus: NET_API_STATUS;
  UserInfo1003: USER_INFO_1003;
  UserInfo1005: USER_INFO_1005;
  ui: USER_INFO_1;
  grp: String;
  sid: PSID;
  snu: SID_NAME_USE;
  sidsize: LongWord;
  refdomain: PLsaReferencedDomainList; //array [0..MAX_PATH - 1] of char;
  refdomainsize: LongWord;
  sidstring: PChar;
  lgmi3: _LOCALGROUP_MEMBERS_INFO_3;
  reftranname: PLsaTranslatedName;
begin
  if UserExists(username) then begin


    sidstring := PChar('S-1-5-32-544'); //Local Administrators group

    refdomain := AllocMem(SizeOf(refdomain));
    FillChar(refdomain, SizeOf(refdomain), 0);

    reftranname := AllocMem(SizeOf(reftranname));

    sidsize := 0;
    sid := nil;
    sid := AllocMem(Length(sidstring) );
    sid := PChar(sidstring); …
Run Code Online (Sandbox Code Playgroud)

delphi winapi

3
推荐指数
1
解决办法
3242
查看次数

标签 统计

delphi ×2

indy ×1

web-scraping ×1

winapi ×1