我有送身后IdHTTP和IdSSL代理服务器后请求的问题,代理服务器POST请求,发送后面使用idHTTP
不知道是否有东西在我的代码或与代理服务器失踪和后,我已经尽力了。 我有时错误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;
UPDATE
错误消息
:First chance exception at $751A2502. Exception class EIdOSSLUnderlyingCryptoError with message 'Error connecting with SSL. error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number'.
UPDATE2 使用
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'.
你能使用Web浏览器访问服务器?你可以发布到其他服务器(例如https://httpbin.org/)吗? – mjn42
我不能@ mjn42 –
你实际使用什么样的代理? 'TIdHTTP.ProxyParams'属性只适用于HTTP代理(并且HTTPS要求代理支持'CONNECT' HTTP方法)。对于其他代理,比如SOCKS,你必须为TIdHTTP.Socket.TransparentProxy属性指定一个合适的组件(比如'TIdSocksInfo'),而不是先分配(TIdHTTP.IOHandler属性)。 –