标签: indy

如何使用Delphi中的DropBox REST API复制文件

我似乎没有管理使用dropbox api操作的文件副本.我可以成功授权我的客户端,下载和上传文件.复制操作需要使用POST方法,我认为这是我产生错误请求的地方.我正在定义OAuth身份验证的POST方法,并使用Indy TIdHTTP发布请求,但我总是收到错误代码403 - 权限被拒绝.

这是dropbox api描述:https://www.dropbox.com/developers/reference/api#fileops-copy

这是我的代码的一部分:

 ParamStr := Format('root=%s&from_path=%s&to_path=%s', [Root, EncodeFileName(FromPath), EncodeFileName(ToPath)]);
 URL := 'https://api.dropbox.com/1/fileops/copy' + '?' + ParamStr;

 Consumer := TOAuthConsumer.Create(Key, Secret);
 AToken := TOAuthToken.Create(fToken, fTokenSecret);
 HMAC := TOAuthSignatureMethod_HMAC_SHA1.Create;
 ARequest := TOAuthRequest.Create('');
 try
  ARequest.HTTPURL := URL;
  ARequest.Method := 'POST';
  ARequest := ARequest.FromConsumerAndToken(Consumer, AToken, '');
  ARequest.Sign_Request(HMAC, Consumer, AToken);


  Params := TStringList.Create;
  try
   Params.Text := ParamStr + '&' + ARequest.GetString;
   HTTP.Post(URL, Params);
  finally
   Params.Free;
  end;
Run Code Online (Sandbox Code Playgroud)

delphi oauth indy dropbox-api

22
推荐指数
1
解决办法
4237
查看次数

使用TIdHttp逐步下载文件

我想使用TIdHttp(Indy10)实现一个简单的http下载器.我从互联网上找到了两种代码示例.不幸的是,他们都没有100%满足我.这是代码,我想要一些建议.


变式1

var
  Buffer: TFileStream;
  HttpClient: TIdHttp;
begin
  Buffer := TFileStream.Create('somefile.exe', fmCreate or fmShareDenyWrite);
  try
    HttpClient := TIdHttp.Create(nil);
    try
      HttpClient.Get('http://somewhere.com/somefile.exe', Buffer); // wait until it is done
    finally
      HttpClient.Free;
    end;
  finally
    Buffer.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

代码紧凑,易于理解.问题是它在下载开始时分配磁盘空间.另一个问题是我们无法直接在GUI中显示下载进度,除非代码在后台线程中执行(或者我们可以绑定HttpClient.OnWork事件).


变式2:

const
  RECV_BUFFER_SIZE = 32768;
var
  HttpClient: TIdHttp;
  FileSize: Int64;
  Buffer: TMemoryStream;
begin
  HttpClient := TIdHttp.Create(nil);
  try
    HttpClient.Head('http://somewhere.com/somefile.exe');
    FileSize := HttpClient.Response.ContentLength;

    Buffer := TMemoryStream.Create;
    try
      while Buffer.Size < FileSize do
      begin
        HttpClient.Request.ContentRangeStart := Buffer.Size;
        if Buffer.Size + RECV_BUFFER_SIZE < FileSize then
          HttpClient.Request.ContentRangeEnd := Buffer.Size + …
Run Code Online (Sandbox Code Playgroud)

delphi http indy download idhttp

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

Indy TCP客户端/服务器,客户端充当服务器

如何使用Indy TIdTCPClientTIdTCPServer在以下场景中使用:

Client  ---------- initate connection -----------> Server
...
Client  <---------------command------------------- Server
Client  ----------------response-----------------> Server
...
Client  <---------------command------------------- Server
Client  ----------------response-----------------> Server
Run Code Online (Sandbox Code Playgroud)

客户端启动连接,但充当"服务器"(等待命令并执行它们).

OnExecute的方法TIdTCPServer并不在此情况下(至少我没有得到它的工作好)很好地工作.我怎么能这样做?

我希望这个问题足够清楚.

delphi client-server indy indy10 delphi-xe

18
推荐指数
3
解决办法
4万
查看次数

Indy或ICS还是?

谁能告诉我哪个更稳定?我知道每个人都有自己的优点和缺点.但哪一个更适合http等?

在我之前的应用程序中,我使用了indy9,但我对它不满意,因为我有时会遇到奇怪的错误.

谁能推荐一个人?

delphi indy

17
推荐指数
4
解决办法
5197
查看次数

如何在Delphi中发出HTTPS POST请求?

在Delphi中执行HTTPS POST请求的最简单方法是什么?我在发出HTTP POST请求时遇到问题,但是如何使用SSL呢?我已经google了一下,并没有发现任何能够解释得很好的东西.

这是我试过的代码:

procedure TForm1.FormCreate(Sender: TObject);
var
  responseXML:TMemoryStream;
  responseFromServer:string;
begin
  responseXML := TMemoryStream.Create;
  IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(self);
  with idSSLIOHandlerSocketOpenSSL1 do
    begin
      SSLOptions.Method := sslvSSLv2;
      SSLOptions.Mode := sslmUnassigned;
      SSLOptions.VerifyMode := [];
      SSLOptions.VerifyDepth := 0;
      host := '';
    end;

  IdHTTP1 := TIdHTTP.Create(Self);
  with IdHTTP1 do
    begin
      IOHandler := IdSSLIOHandlerSocketOpenSSL1;
      AllowCookies := True;
      ProxyParams.BasicAuthentication := False;
      ProxyParams.ProxyPort := 0;
      Request.ContentLength := -1;
      Request.ContentRangeEnd := 0;
      Request.ContentRangeStart := 0;
      Request.Accept := 'text/html, */*';
      Request.BasicAuthentication := False;
      Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
      HTTPOptions := …
Run Code Online (Sandbox Code Playgroud)

delphi indy

17
推荐指数
1
解决办法
4万
查看次数

如何从Delphi中的URL获取图像

我正在寻找任何代码示例,展示如何将图像从URL拉入Delphi TImage组件.

谢谢,

delphi indy

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

INDY 10.1.5 - 哪些SSL dll与Delphi 2006一起使用?

我正在尝试连接到谷歌文档(遵循Marco Cantu的优秀REST示例),但我收到以下SSL错误:

1)如果我使用openssl-0.9.8i-i386-win32.zip中的SSL dlls,我收到错误:

"无法加载SSL库"

2)如果我使用indy_OpenSSL096m.zip中的SSL dll我得到错误:

"与SSL连接时出错"

3)如果我使用openssl-0.9.8h-i386-win32-Indy-IntraWebEdition.zip中的SSL dlls我得到错误:

"无法加载SSl库"

现在我已经研究了这个,并且有很多关于dll死链接的建议,包括堆栈溢出的链接.我怀疑我需要找到与我正在使用的INDY版本兼容的SSL dll.

我的问题是,有没有人确切知道哪些SSL dll与Delphi 2006和INDY 10.1.5兼容?

delphi ssl openssl indy delphi-2006

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

在Delphi 2009中逐步升级Indy 10

有人可以帮助告诉有关如何卸载Indy 10并安装最新版本的详细信息吗?我找到了它http://indy.fulgan.com/ZIP/IndyTiburon.zip

有一个类似的问题,但不是一个令人满意的答案,只是来自用户的一些评论,但这不是一步一步的指导.

为什么没有这个工具?

delphi indy delphi-2009 indy10

16
推荐指数
1
解决办法
5185
查看次数

如何在系统路径之外使用dll

我创建了一个使用openssl dll(libeay32.dllssleay32.dll)的应用程序.使用它们是indy,我不直接调用dll.

我发现最简单的解决方法是避免使用安装程序(我只是删除了一个exe,我对这种方法没问题)是:

  1. 把dll作为exe的资源
  2. 在程序启动时,我在exe文件夹中提取它们
  3. exe使用它们

这是完美的,但我想通过提取临时文件夹中的dll而不是exe文件夹(在许多情况下是桌面)来改进方法.

问题是我不知道如何强制应用程序在temp文件夹中使用dll,因为现在的行为是:如果dll不在当前目录中,则尝试搜索系统路径中定义的目录.

谁知道迫使indy在我的临时路径中使用dll的解决方案?(比如"临时登记dlls")

delphi dll openssl indy indy10

16
推荐指数
3
解决办法
4052
查看次数

Indy 10 Http Server示例

我需要一个简单的代码样本用于Indy 10 Http Server当请求(post)只显示它是否有一个Indy 9样本?谢谢

delphi http indy delphi-7

15
推荐指数
2
解决办法
3万
查看次数