我有以下任务:使用HTTPS和身份验证下载文件.Indy似乎要走了,但由于某种原因它到目前为止还不起作用.我有以下内容:
该站点还需要身份验证,我在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可以正常工作.关于什么缺失或我做错了什么的任何想法?
使用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,完成了它的转移?
将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开发人员,我一直在讨论所有这些问题:)
使用印10.为了使通信效率这一个与TCP通信交易,我编写一个客户端操作请求作为单个字节(在大多数情况下,接着,当然其他数据字节,但在这种情况下,只有一个单一的字节).问题是
var Bytes : TBytes;
...
SetLength (Bytes, 1);
Bytes [0] := OpCode;
FConnection.IOHandler.Write (Bytes, 1);
ErrorCode := Connection.IOHandler.ReadByte;
Run Code Online (Sandbox Code Playgroud)
不立即发送该字节(至少不调用服务器执行处理程序).如果我将'1'更改为'9',例如一切正常.我假设Indy缓冲了输出字节,并尝试禁用写缓冲
FConnection.IOHandler.WriteBufferClose;
Run Code Online (Sandbox Code Playgroud)
但它没有帮助.如何发送单个字节并确保立即发送?并且 - 我在这里添加另一个小问题 - 使用indy发送整数的最佳方法是什么?不幸的是,我无法在TIdTCPServer的IOHandler中找到像WriteInteger这样的函数......而且
WriteLn (IntToStr (SomeIntVal))
Run Code Online (Sandbox Code Playgroud)
对我来说似乎不是很有效率.是否有所作为我是否使用多个写命令行或字节数组一起收拾东西,并发送一次?
谢谢你的回答!
编辑:我补充说,我使用的是印地10日以来似乎有关于读了重大变化,写程序的提示.
我正在使用Delphi,我想确定网络中网络设备的物理MAC地址,在本例中是路由器本身.
我的代码:
var
idsnmp: tidsnmp;
val:string;
begin
idsnmp := tidsnmp.create;
try
idsnmp.QuickSend('.1.3.6.1.2.1.4.22.1.2', 'public', '10.0.0.1', val);
showmessage(val);
finally
idsnmp.free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
其中10.0.0.1是我的路由器.
唉,QuickSend总是发送"由#10054连接重置".我试图修改MIB-OID,我也尝试了IP 127.0.0.1,哪个连接永远不会失败.我没有在Google上找到任何关于TIdSNMP的可用教程.:-(
关心Daniel Marschall
案子
我正在尝试将INDY更新为我的Delphi XE(Update 1)的最新版本,所以我从indy.fulgan.com/ZIP下载了最新的INDY10文件(Indy_4545.zip).
这些包成功编译,现在我甚至可以在about box对话框中看到新版本10.5.8.0,但是在IDE重启之后我收到一条消息说:
No se encuentra el punto de entrada del procedimiento @ Idhttp @ TIdCustomHTTP @ GetRequestHeaders $ qqrv en la bibliotecadevínculosdinámicosIndyProtocols150.bpl.
我免费翻译成英文:
在动态链接库IndyProtocols150.bpl上找不到过程@ Idhttp @ TIdCustomHTTP @ GetRequestHeaders $ qqrv的入口点.
在对新旧IdHTTP.pas进行快速比较后,我发现TIdCustomHttp类有很多变化,包括重命名一些方法
与此更改以及其他和类接口中已更改的公共/已发布方法公司一起.
更新后,我得到了很多无法加载的软件包,包括dclcxPivotGridOLAPD15.bpl,它依赖于dclDataSnapServer150.bpl,它遇到了bpl上缺少的方法.
AFAIK我无法重新编译dclDataSnapServer150.bpl(也许还有其他失败的软件包,我刚刚停在这里).
IDE上的DataSnap和DevExpress支持对我来说是必须的
问题
用Firemonkey查看新的Delphi XE2.考虑到它为Windows,Mac OSX和iOS编译,VCL组件在FireMonkey应用程序中是无用的.
我的问题是:是否会有Indy Firemonkey版?因为我非常需要IdHTTP.Post();.如果没有,有没有办法在FireMonkey中执行此操作?
我现在谷歌搜索了很长一段时间,没有找到任何东西.:S
我正在尝试连接到smtp.live.com发送电子邮件(live.com支持自2009年以来的免费pop3/smtp,但这对我来说完全是新闻).
以下是当我尝试连接到smtp.live.com端口587时发生的情况:
Method sslvSSLv2 - timeout (obviously the server does not support SSL2)
Method sslvSSLv3 - Error connecting with SSL. - error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
Method sslvSSLv23 - Error connecting with SSL. - error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Method sslvTLSv1 - Error connecting with SSL. - error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
Run Code Online (Sandbox Code Playgroud)
我使用与sslvSSLv23和sslvTLSv1相同的代码,它与gmail smtp(smtp.gmail.com,端口465)服务器一起正常工作.此外,Outlook在检查SSL时正常发送邮件,在端口587上发送邮件,因此它可能与OpenSSL相关.任何人都可以帮我解开这个谜团吗?我错过了设置的东西吗?
我遇到一个奇怪的问题.
我使用Delphi和Indy上传和备份一些文件.它在许多计算机上运行得很好(Win7 64bit,WinXP).CPU使用率低于1%和最大值.RAM为20MB.
但是有一台计算机(Win 2008 R2)存在问题,我无法找到原因.CPU使用率为5-20%,内存需要100MB +,并且增加了很多.此外,"页面错误"上升很多,例如.每秒10万(我的电脑没有增加)
代码很简单
var
IdHTTP: TIdHTTP;
IdPostData: TIdMultiPartFormDataStream;
sResponse: string;
begin
IdHTTP := TIdHTTP.Create(nil);
IdPostData:=TIdMultiPartFormDataStream.Create;
try
IdPostData.AddFile('file', 'C:\data.dat', '');
sResponse:=IdHTTP.Post('http://web.com', IdPostData);
ShowMessage(sResponse);
finally
IdHTTP.Free;
IdPostData.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
有没有人知道为什么"页面错误"增加了很多?是否有可能存在硬件问题?怎么找到它?
我正在使用TIdSSLIOHandlerSocketOpenSSL打开TLS/SSL连接.我目前想要支持1.0到1.2.
我像这样初始化IOHandler.
TIdSSLIOHandlerSocketOpenSSL(FSocket.IOHandler).SSLOptions.SSLVersions := [sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1];
Run Code Online (Sandbox Code Playgroud)
建立连接后,如何才能获得为连接协商的协议?(两者都用于确保客户端和测试服务器的配置是正确的,并最终用于统计目的).
我SSLContext.Method在连接后检查过,但sslvSSLv23在连接后仍然显示.SSLContext.SSLVersions节目[sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1].
那么我如何获得这些信息呢?
delphi ×10
indy ×10
indy10 ×3
openssl ×2
delphi-2006 ×1
delphi-2009 ×1
delphi-xe ×1
delphi-xe2 ×1
firemonkey ×1
http ×1
networking ×1
page-fault ×1
performance ×1
proxy ×1
smtp ×1
snmp ×1
ssl ×1
stream ×1
tcp ×1