Delphi 10.3中的HTTPReqResp OnBeforePost更改

时间:2019-12-28 23:26:22

标签: delphi wininet delphi-10.3-rio internetsetoption

我有一个以前使用Data参数的事件代码,但是在Delphi 10.3中,该参数已被替换。

在Delphi 10.3之前:

procedure THTTPEvents.HTTPReqResp1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
begin
  // set the certificate to use for the SSL connection
  if not InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, PCertContext, Sizeof(CERTCONTEXT)*5)
    then Raise Exception.Create('Problema no certificado!');
end;

在这段代码中,我使用InternetSetOption(),现在应该如何在Delphi 10.3中继续?如何获取Data参数?

procedure THTTPEvents.HTTPReqResp1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
  Store        : IStore;
  Cert         : ICertificate2;
  CertContext  : ICertContext;
  PCertContext : PCCERT_CONTEXT;
begin
  try
    if not FileExists(HTTPEvents.PFXFile) then
      Raise Exception.Create('Ficheiro de certificado não encontrado!');

    HttpReqResp.ConnectTimeout := 12000;
    HttpReqResp.ReceiveTimeout := 12000;
    HttpReqResp.SendTimeout := 12000;

    // create Certificate store object
    Store := CoStore.Create;
    Cert := CoCertificate.Create;
    Cert.Load(HTTPEvents.PFXFile, HTTPEvents.PFXPass, CAPICOM_KEY_STORAGE_DEFAULT, CAPICOM_CURRENT_USER_KEY);
    CertContext := Cert as ICertContext;
    CertContext.Get_CertContext(Integer(PCertContext));

    // set the certificate to use for the SSL connection
    if not InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, PCertContext, Sizeof(CERTCONTEXT)*5)
      then Raise Exception.Create('Problema no certificado!');
    CertContext.FreeContext(Integer(PCertContext));
  except
    ON E:Exception DO ShowMessage(E.Message);
  end;
end;

BeforePost事件中的所有代码。这段代码在delphi 10.3中不起作用,因为参数“ Data”。如果有人感谢我,这个问题会让我发疯。

0 个答案:

没有答案