1

このサイトに入り、フォームを使用して .exe ファイルを取得するアプリケーションを Delphi でプログラムする必要があります (実際、サイトは手動で名前を変更する必要がある .ex_ ファイルを送信します)。

http://www.bmf.com.br/arquivos1/arquivos_ipn.asp?idioma=pt-BR&status=ativo

ブラウザー経由で、「Cenários de Margem - CORE」の左側にあるチェックボックスをクリックしてから、[ダウンロード] ボタンをクリックすると、ファイルが自動的に取得されます。

他のサイトの .dat ファイルを操作できましたが、何が問題なのかわかりません。

問題は、コンテンツ タイプまたはファイルの保存方法にあるはずだと思います。

これは私がこれまでに得たものです:

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;
4

1 に答える 1

3

ブラウザと同じように、まずダウンロード ページを取得してサーバーの Cookie を取得し、次にダウンロード リクエストを送信して、Cookie をサーバーに送り返す必要があります。

これを試して:

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;
于 2014-08-22T22:14:45.540 に答える