delphi - 如何在Delphi中使用XMLHTTPRequest获取图像二进制数据

标签 delphi xmlhttprequest

我需要在 Delphi 中使用 XMLHttpRequest 访问二进制图像数据。我正在使用以下代码,但它不起作用,有人可以告诉我这段代码有什么问题吗,提前谢谢。

//I am using this function to get Image Binary data into Memory Stream.
procedure SendGETRequest(p_Url: string; p_resStream: TMemoryStream);
begin  
  FXmlHttpReq.open(METHOD_GET, p_Url, false, FUsername, FPassword);
  FXmlHttpReq.setRequestHeader(HTTP_AUTHENTICATION, HTTP_BASIC + EncodeBase64(
    FUsername + ':'+FPassword));
  FXmlHttpReq.setRequestHeader(HTTP_CACHE_CONTROL, HTTP_NO_CACHE);
  //FXmlHttpReq.setRequestHeader('Content-type','application/octet-stream');
  FXmlHttpReq.send('');

  if not VarIsEmpty(FXmlHttpReq.responseBody) then
  begin
   p_resStream:= OleVariantToMemoryStream(FXmlHttpReq.responseStream);
  end;//if...
end;

function OleVariantToMemoryStream(OV: OleVariant): TMemoryStream;
var
  Data: PByteArray;
  Size: integer;
begin
  Result := TMemoryStream.Create;
  try
    Size := VarArrayHighBound (OV, 1) - VarArrayLowBound(OV, 1) + 1;
    Data := VarArrayLock(OV);
    try
      Result.Position := 0;
      Result.WriteBuffer(Data^, Size);
   finally
     VarArrayUnlock(OV);
   end;
  except
    Result.Free;
    Result := nil;
  end;
end;

最佳答案

responseStreamIStream。您需要使用 TOleStream 对其进行转换(AxCtrls):

uses AxCtrls, ComObj, ActiveX;

procedure TForm1.Button1Click(Sender: TObject);
var
  oXMLHTTP: OleVariant;
  MemoryStream: TMemoryStream;
  Stream: IStream;
  OleStream: TOleStream;
begin
  oXMLHTTP := CreateOleObject('MSXML2.XMLHTTP.3.0');
  oXMLHTTP.open('GET', 'https://www.google.com/images/srpr/logo11w.png', False);
  oXMLHTTP.send(EmptyParam);
  Stream := IUnknown(oXMLHTTP.ResponseStream) as IStream;
  OleStream := TOleStream.Create(Stream);
  try
    OleStream.Position := 0;
    MemoryStream := TMemoryStream.Create;
    try
      MemoryStream.CopyFrom(OleStream, OleStream.Size);
      MemoryStream.SaveToFile('logo11w.png');
    finally
      MemoryStream.Free;
    end;
  finally
    OleStream.Free;
  end;
end;

关于delphi - 如何在Delphi中使用XMLHTTPRequest获取图像二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26967076/

相关文章:

delphi - 框架依赖是否有问题?

delphi - 在运行时创建系列时,系列未显示在 TeeChart 中?

delphi - 如何在Delphi TCanvas中引入半透明矩形?

android - 接收 XML 文件已损坏(在 sprint 网络上)?

amazon-web-services - 从 AWS Amplify 部署的 HTTPS (SSL) 客户端向 HTTP 端点发出 API 请求

javascript - 这段代码有什么问题? :/

windows - 在表单显示之前检测鼠标按钮是否已经按下

jquery - XHR Level2 与 jQuery 用于文件上传

javascript - 在 Dash.js 中使用 JavaScript 前进到下一个视频

delphi - 如何在兼容的方法指针之间进行转换?