首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Idhttp +下载+ Delphi + ASP.NET

Idhttp +下载+ Delphi + ASP.NET
EN

Stack Overflow用户
提问于 2014-08-22 20:21:04
回答 1查看 435关注 0票数 1

我需要用Delphi编程一个应用程序,这个应用程序进入这个站点并使用表单获得一个.exe文件(实际上,该站点发送一个.ex_文件,您必须手动重命名)。

ipn.asp?idioma=pt-BR&status=ativo

通过浏览器,我只需单击"Cenários de Margem - CORE“左侧的复选框,然后单击”下载“按钮,然后自动获取文件。

我设法处理了来自其他站点的.dat文件,现在我不知道可能出了什么问题。

我认为问题应该是内容类型或保存文件的方式。

到目前为止,我得到的是:

代码语言:javascript
运行
复制
procedure DownloadViaPost;
var
  objHttp: TIdHttp;
  sUrl: String;
  sGetRequest: String;
  objParametrosPost: TStringList;
  objRespostaPost: TStringStream;
  sViewState: String;
  sEventValidation: String;
begin
  sUrl := 'http://www.bmf.com.br/arquivos1/arquivos_ipn.asp';
  objHttp := TIdHTTP.Create(nil);
  objParametrosPost := TStringList.Create;
  objRespostaPost := TStringStream.Create;
  try
    objHttp.HandleRedirects := true;
    objHttp.AllowCookies := true;
    objParametrosPost.Add('hdnStatus=ativo');
    objParametrosPost.Add('chkArquivoDownload_ativo=36');
    objParametrosPost.Add('txtDataDownload_ativo=21/08/2014');
    objParametrosPost.Add('imgSubmeter.x=31');
    objParametrosPost.Add('imgSubmeter.y=9');
    objParametrosPost.Add('imgSubmeter=ativo');
    objHttp.Request.ContentType := 'application/octet-stream exe';
    objHttp.Post(sUrl, objParametrosPost, objRespostaPost);
    objRespostaPost.SaveToFile('C:\Download.ex_');
  finally
     FreeAndNil(objHttp);
     FreeAndNil(objParametrosPost);
     FreeAndNil(objRespostaPost);
  end;
end;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-22 22:14:45

就像浏览器一样,您需要首先撤回下载页面以获取服务器的cookie,然后发布下载请求,以便将cookie发送回服务器。

试试这个:

代码语言:javascript
运行
复制
procedure DownloadViaPost;
var
  objHttp: TIdHttp;
  objRespostaPost: TMemoryStream;
  objParametrosPost: TStringList;
begin
  objHttp := TIdHTTP.Create(nil);
  try
    objHttp.HandleRedirects := true;
    objHttp.AllowCookies := true;

    objHttp.Get('http://www.bmf.com.br/arquivos1/arquivos_ipn.asp?idioma=pt-BR&status=ativo');

    objRespostaPost := TMemoryStream.Create;
    try
      objParametrosPost := TStringList.Create;
      try
        objParametrosPost.Add('hdnStatus=ativo');
        objParametrosPost.Add('chkArquivoDownload_ativo=36');
        objParametrosPost.Add('txtDataDownload_ativo=22/08/2014');
        objParametrosPost.Add('imgSubmeter.x=37');
        objParametrosPost.Add('imgSubmeter.y=6');

        objHttp.Request.Referer := 'http://www.bmf.com.br/arquivos1/arquivos_ipn.asp?idioma=pt-BR&status=ativo';
        objHttp.HTTPOptions := objHttp.HTTPOptions + [hoKeepOrigProtocol, hoTreat302Like303];

        objHttp.Post('http://www.bmf.com.br/arquivos1/download_ipn.asp', objParametrosPost, objRespostaPost);
      finally
        FreeAndNil(objParametrosPost);
      end;
      objRespostaPost.SaveToFile('C:\Download.exe');
    finally
      FreeAndNil(objRespostaPost);
    end;
  finally
    FreeAndNil(objHttp);
  end;
end;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25455003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档