标签: indy

IdHttp刚刚获取响应代码

我正在使用idhttp(Indy)做一些网站检查.我想要它做的就是在我的请求发送后检查来自服务器的响应代码,我不想实际上必须从服务器接收HTML输出,因为我只监视200 OK代码,任何其他代码意味着存在某种形式的问题.

我查了idhttp帮助文档,我能看到的唯一方法就是将代码分配给a MemoryStream,然后立即清除它,但这不是很有效并且使用不需要的内存.有没有办法只是调用一个站点并获得响应,但忽略发回的HTML更高效,不浪费内存?

目前代码看起来像这样.然而,这只是我尚未测试的示例代码,我只是用它来解释我正在尝试做什么.

Procedure Button1Click(Sender: TObject);

var
http : TIdHttp;
s : TStream;
url : string;
code : integer;

begin 

   s := TStream.Create();
   http := Tidhttp.create();
   url := 'http://www.WEBSITE.com';

   try

    http.get(url,s);
    code := http.ResponseCode;
    ShowMessage(IntToStr(code));

   finally

   s.Free();
   http.Free();

end;
Run Code Online (Sandbox Code Playgroud)

delphi indy idhttp

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

从"由Peer连接重置"Indy TCP客户端恢复

在这种情况下我该如何恢复?

服务器崩溃,因此连接异常关闭.对几乎所有内容的调用都会导致"对等连接重置"异常.我似乎已经通过在except块内的TIdTCPClient对象上调用Disconnect来修复它,但是它导致了一个带有相同消息的最终异常(我在第二个try-except块中捕获了它).

这与Indy10和Delphi XE2有关.

   try
      if not EcomSocket.Connected then EcomSocket.Connect();
    except
      on e: Exception do begin
        try
          EcomSocket.Disconnect();
        except
          MessageDlg('Connectivity to the server has been lost.', mtError, [mbOK], 0);
        end;
      end;
    end;
Run Code Online (Sandbox Code Playgroud)

delphi tcp indy

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

如何配置Indy v10以支持IPv4 + IPv6?

使用以下代码,我可以获得IPv4网站的内容:

uses 
  IdHttp;

IdHttp1 := TIdHttp.Create(nil);
try
  Result := IdHttp1.Get('http://www.heise.de/')
finally
  IdHttp1.Free;
end;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试连接到IPv6网站时,我收到套接字错误#11004:

IdHttp1 := TIdHttp.Create(nil);
try
  Result := IdHttp1.Get('http://www.six.heise.de/')
finally
  IdHttp1.Free;
end;
Run Code Online (Sandbox Code Playgroud)

我可以ping www.six.heise.de就好了(IP 2a02:2e0:3fe:100 :: 6 :)并且Firefox显示网站没有问题.

我需要在Indy(SVN的最新V10版本)中更改以连接到IPv4和IPv6网站吗?

delphi indy indy10

10
推荐指数
1
解决办法
3479
查看次数

Delphi/Indy IdHttpServer没有多线程?

我正在使用Delphi 2006和Indy 10.我创建了一个表单并下载了一个IdHttpServer组件.我为表单设置OnCreate事件以将服务器设置为活动状态,然后为服务器的OnCommandGet输入以下行:

procedure TForm3.IdHTTPServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
   Beep;
   Sleep(10000);
   AResponseInfo.ContentText := DateTimeToStr(Now);
end;
Run Code Online (Sandbox Code Playgroud)

注意睡眠10秒钟.

然后我用Firefox测试,使用2个浏览器.我有第一个连接到"localhost",我立刻听到一声哔哔声.然后我选择第二个浏览器,并将其连接到localhost(在不到10秒的时间内),但它不会立即发出哔声.它等待第一个请求完成,然后发出蜂鸣声,并等待另一个10秒.

我以为这些组件是多线程的?是否有一些我可以设置的属性使其表现得像我想象的那样(两个请求都会得到立即回答).

delphi multithreading http indy

9
推荐指数
1
解决办法
5288
查看次数

如何使用Indy 10和OpenSSL通过HTTPS下载文件?

我有以下任务:使用HTTPS和身份验证下载文件.Indy似乎要走了,但由于某种原因它到目前为止还不起作用.我有以下内容:

  • 我用来下载的TIdHTTP组件
  • 用于创建URL的TIdURI组件
  • 应该提供安全连接的TIdSSLIOHandlerSocketOpenSSL组件.所需的DLL位于二进制文件夹中.

该站点还需要身份验证,我在URL中包含用户/传递,如下例所示.简而言之,这是代码:

URI := TIdURI.Create('https://test.example.com/');
URI.Username := ParamUserName;
URI.Password := ParamPassword;

HTTP := TIdHTTP.Create(nil);
if URI.Protocol = 'https' then
begin
  IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  IOHandler.SSLOptions.Method := sslvSSLv3;
  HTTP.IOHandler := IOHandler;
end;

HTTP.Get(URI.GetFullURI([ofAuthInfo]), FileStream);
Run Code Online (Sandbox Code Playgroud)

使用此代码,我可以非常快速地获得"读取超时"EIdReadTimeout异常.在浏览器中测试URL可以正常工作.关于什么缺失或我做错了什么的任何想法?

delphi openssl indy delphi-2006

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

如何使用Indy的smtp服务器组件发送邮件?

由于http://www.indyproject.org/Sockets/Demos/index.EN.aspx中给出的演示只将接收的流保存到文件中,因此我不知道如何有效地将该流作为邮件发送.

谁能教我如何做到这一点或指出一些更完整的例子?

delphi indy

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

从TIdHttp获取响应,错误代码为400

我一直在为StackApps API 编写Delphi库.

我遇到了Indy的问题.我正在使用Delphi 2010附带的版本.如果您将无效参数传递给其中一个StackApps API,它将返回HTTP错误代码400,然后在响应中它将包含一个包含更多详细信息的JSON对象.

通过访问Chrome浏览器中的http://api.stackoverflow.com/0.8/stats/?Key=BadOnPurpose,您可以看到示例.IE和Firefox隐藏了JSON.

使用WireShark我可以看到使用下面的代码返回JSON对象,但是我无法使用Indy访问它.

对于此测试代码,我在表单上删除了一个TIdHttp组件,并在按钮单击中放置以下代码.

procedure TForm10.Button2Click(Sender: TObject);
var
 SS : TStringStream;
begin
  SS := TStringStream.Create;
  IdHTTP1.Get('http://api.stackoverflow.com/0.8/stats/?Key=BadOnPurpose',SS,[400]);
  Memo1.Lines.Text := SS.DataString;
  SS.Free;
end;
Run Code Online (Sandbox Code Playgroud)

我通过了[400],因此它不会引起400异常.似乎Indy停止阅读回应.由于Memo1的内容为空.

我正在寻找一种获取JSON详细信息的方法.

delphi indy

9
推荐指数
1
解决办法
5991
查看次数

将流传递给CommandGet后,什么时候可以释放?

使用indy TIdHTTPServer,在OnCommandGet上,有可能将带有数据的流传递给AResponseInfo.ContentStream.这很好.我何时可以发布该流?假设服务器可以获得多个请求,并且可以在给定时间处理任何请求,并且一个流可以完成另一个流的任意.

流可以在哪里被释放?

代码示例:

var
  StreamsToFree : TList;

//assume StreamsToFree := TList.create; properly 

procedure TObject.IdHttpServerCommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
stream : TFileStream;
begin
  stream := TFileSTream.create('file.name');
  AResponseInfo.ContentStream := stream;
  AResponseInfo.ResponseNo := 200;
  StreamsToFree.Add(generateReceiptXML);  
end;
Run Code Online (Sandbox Code Playgroud)

什么时候可以释放流?什么甚至,我们如何知道IdHttpServer,完成了它的转移?

delphi memory-management indy stream delphi-2009

9
推荐指数
1
解决办法
1229
查看次数

IdHTTP + SOCKS +袜子5

IdHTTP客户端组件与SOCKS5代理服务器结合使用时,我遇到了一般的Indy错误SSL.

  • 如果我使用IdHTTP我的SOCKS5代理组件(和非https URL),一切都可以正常工作.
  • 如果我使用IdHTTP带有SSL URL 的组件(并且没有SOCKS5代理),一切都可以正常运行.
  • 如果我使用IdHTTP带有SSL URL和SOCKS5代理的组件,我会收到以下错误:

Line 405 的错误输出 idSocks.pas (raise EIdSocksServerGeneralError.Create(RSSocksServerGeneralError);

这是我的代码

var
  HTTP            : TIdHTTP;
  Cookie          : TIdCookieManager;
  SSL             : TIdSSLIOHandlerSocketOpenSSL;
  Params          : TStringList;
  HTMLSource      : String;
  CurrentProxy    : String;
  ProxyPort       : Integer;
  ProxyHost       : String;
  ProxyUsername   : String;
  ProxyPW         : String;
begin
  Synchronize(AddItem);
  HTTP                          := TIdHTTP.Create(NIL);
  Cookie                        := TIdCookieManager.Create(HTTP);
  SSL                           := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
  HTTP.CookieManager            := Cookie;
  HTTP.IOHandler                := …
Run Code Online (Sandbox Code Playgroud)

delphi ssl proxy indy

9
推荐指数
1
解决办法
2629
查看次数

为什么indy返回不可读的数据,但chrome加载它很好?

我正在尝试在我的一个GET游戏服务器的RESTAPI上做一个请求.当我在chrome中加载它时会加载正确的json响应但是当我尝试用indy做它时它只给了我一堆不可读的文本.

请求的URL:http://129.232.180.125:28019/deaths.json

Chrome响应:

Chrome响应

Indy响应:

Y;9[ÿÍZË7¼ç3öìDQ%ÿJÃÚØ,Öw   òï§IµzvXÓö{Ab¿ÿöÏÝ»÷Ä!¾»ûûîýBó»»÷ßOwïï><¼îþ}§ På¢&È÷ÇÇÓË
gP¤@¹(¬Dv&©ÙEµ¸®D"`»@ëJ¥E\¦£??Þ?Ù@%¤3¨µ òrÿaCHZÝÀÕ
¯[%ö1cÓÔB)QV¡÷àõ=¢oÅt¥þóR§Ó§§Ï®Ô¶â*ëEu<wKÜôiýUØ^VµcÓ@vêâ»ÈR©hPædÛ=û±ô~¡;±8¢¢ÒtÇ/§û
Si¿·Õ
Zô1-W¥²¾KdP¡tÇXýc--[ÛàÔ-Go¼aI4]ñôãÏǯÏ_& h¶@5Gá0Ú#!`u.éöæà¿i³ÇhFÜ]Q´µjÁ
d¼Ê%½|ÔRØ\­¡Ókbê;Â$`¹^ìX»Ó`ϢѤù»   i2S$Ýûöõ¯ÉÑ2    D(,öæÛý§ûÙ¯j\-AOÙ^&Gä£WK¥2\ÙW[%a»a\Ò' U½4ßß+¯>bV«ÏêUçq¡õÏIÜ
,1×çiJ¾¸¸^Ðh}_æéê{²Ú°pp¼²KÖ÷ÞNÄIß¼D÷W+K3ËûÔz:}ÚÞ5
SB^"ÕKªGè¸+¾ß^~$Õâ³6Tõ]2Õßr9¸%eàYYUrsJÏ`Êä³ë'£t8#®AB¨KϹëOAe9V ×Ís-£¬Ó鬺ùÜ\)µµ©±¢xÜj« ½ê(JRâÜ>\<M´@6Xd°ý~®i ÄCõBe;&©l³"¦}.uUè5(ÝE®V;BìðùôtúöðqÆÅ8~cÜ¡}{\h9Í©¡0²]Cèl¯s%qeÅô{Ø]zOöÞ|W-ÆöÎ%媫¦@çÎл[jѶÊÞÒÙq¤¸qZÛ/îÕ=KTÓ³ÿÒ=Go@Îì6*Z¯\W7¡ê!rM´'£¸ÇR­»[G%ëp"?+²q?!ÔU{n,QâsðÚ9÷Þòì³H¡#f<Î.ÛÂѲ­Ät$u\9KoËGpE9b+ NsQÏ>ÉIiÒQs8ôòVÖMó.Þ÷ex ½½îx!RNÇZH?×b@ Ó$v¥_SfçF«Q®n`|à`«T­®Ð¦©¸×5*<?qC´/ø©¿ÑJ¬ªï´´+ýÑHjiK( ;¤øÓA#mýH߬5v ¡µR
´RI{ÊPAn,&æF ,&Õ/ônÓÚ¨­oÄÀùYó}DUÿêà}C$e õ^LYæªYßÍX«Z2»ËeOæVqWvrW1ÚP«¿_kÆ-¢¢2Ar«ö©]x¢|4Ñ¿¯Y[¹">´¸(lÉÆÓÌå/BÙ!ìPGr£`¶Ê
[!ªóèsfÄt+­.v.5_jÎê'Ô8Õ
Ö1ÒøMÜÑõâ[®ÇÄ)ãZYàÜ;Q!Ëa2Û^Zìçsá¹Ø^´QZbKnk9&ÄKºý¼ý®Úú11pÀ¦Eç°¿9r¾«ÿ®yýÆà"ø×
 (ù ?Ko¼Þ!Τ¸ò¿^/ºo¼½åzãß*A9aãÔ°¥Ù8umÁàËuni(
    '-®®DÕêüý¸o¢z­äݲé/lßþËÁi-ö:IhÙ8£i?|Û×RÐØï/ÐÀ,I
°Ù¥xXIRê0¹\x9séU=ªajä ^Æ£À±b¼$ÞP6<fF!µ¡Àßù!ûí7t¨¬XRÀJï\VãØsþð»b¨´7B` FýÀJÕ´F 
6Ë

èög»&·ã«¶ÛýAuR®ÝåL¬.YÌÄÿ£0æÀ%dÅ)²dhs´k¯.Ûg%ÅÂ.sâ¬Úé
zµ½ ;¸Z}»ÕUH«;ébÿ£j£%³S÷ú~X´@ýgý:¹½ 0w@ºØHâ³·,`!«G(]íä,Q¡NØm¢Î°,ÔY`Ùi;Ò¦×b¤×?BûMd¡Çdª <ï"QÕýWÏ®µ±× "6'3ý¹¦wþGSCt7Ùäk Ne¾ªÑ¿Ò(múS Ô$DifA{ª*ö¥(-gg¶a³~v(dê©=Om+á½üí±6®yf°1²ÐNi(y`B»ò¦¹ÃàuS!kµ¡¡i÷6¦   hÖ½;r"¢R»yÆ&OªoE·VU´¹)_Q9Ç¥2lÑÀâîUhñ~¼4óß4"\µnøæèî½5Ç00fúiPàýLØ~¯é§?_HÙ&Í÷;Ynnw¯8àoü¬¼^+2
Run Code Online (Sandbox Code Playgroud)

我的代码:

mmo1.Lines.Text := idhtp1.Get('http://129.232.180.125:28019/deaths.json');

delphi rest get indy firemonkey

9
推荐指数
1
解决办法
171
查看次数