【发布时间】:2017-08-08 09:30:41
【问题描述】:
我在使用 IdHTTP 和 IdSSL 的代理服务器后面发送发布请求时遇到问题,
不确定我的代码或代理服务器是否缺少某些内容并发布,我已尽我所能。 我有时会收到错误 10061 连接被拒绝,连接超时。
使用 Delphi XE8
var
Params: TStrings;
lHTTP: TIdHTTP;
IdSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
TThread.CreateAnonymousThread(procedure ()
begin
Params := TStringList.Create;
lHTTP := TIdHTTP.Create(nil);
try
IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
IdSSL.SSLOptions.Method := sslvTLSv1_2;
IdSSL.SSLOptions.SSLVersions := [sslvSSLv3];
lHTTP.IOHandler := IdSSL;
lHTTP.HandleRedirects := True;
Params.Add('username=myuser');
Params.Add('password=mypass');
try
lHTTp.ProxyParams.ProxyServer := '177.104.200.15';
lHTTp.ProxyParams.ProxyPort := 35923;
lHTTp.ReadTimeout := 60000;
lHTTp.Connect('instagram.com', 80);
lHTTP.Request.Accept := '*/*';
lHTTP.Request.AcceptLanguage := 'en-US,en;q=0.5';
lHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
lHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0';
Reply := lHTTP.Post('https://Instagram.com/login', Params);
TThread.Synchronize(TThread.CurrentThread,
procedure()
begin
memo3.lines.add(reply);
end);
IdSSl.Free;
lHTTP.Free;
except on E: EIdHTTPProtocolException do
begin
TThread.Synchronize (TThread.CurrentThread,
procedure ()
begin
memo3.lines.add(E.ErrorMessage);
end);
end;
end;
except on E: EIdHTTPProtocolException do
begin
TThread.Synchronize (TThread.CurrentThread,
procedure ()
begin
memo3.lines.add(E.ErrorMessage);
end);
end;
end;
end).Start;
end;
更新
错误信息:First chance exception at $751A2502. Exception class EIdOSSLUnderlyingCryptoError with message
'Error connecting with SSL.
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number'.
更新2 使用
IdSSL.SSLOptions.Method := sslvSSLv23; // enable all available versions first
IdSSL.SSLOptions.SSLVersions := IdSSL.SSLOptions.SSLVersions - [sslvSSLv2, sslvSSLv3];
给出错误:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol'.
【问题讨论】:
-
你能用你的浏览器访问服务器吗?可以发帖到其他服务器(例如httpbin.org)吗?
-
我不能@mjn42
-
您实际使用的是哪种代理?
TIdHTTP.ProxyParams属性仅适用于 HTTP 代理(并且 HTTPS 要求代理支持CONNECTHTTP 方法)。对于其他代理,例如 SOCKS,您必须将适当的组件(例如TIdSocksInfo)分配给TIdHTTP.Socket.TransparentProxy属性(在首先分配TIdHTTP.IOHandler属性之后)。 -
我做了,但是另一个错误消息,请检查更新,有什么问题! @RemyLebeau
-
@P.R:您没有正确配置 SSLIOHandler。看我的回答。