procedure TForm1.Button1Click(Sender: TObject);
var
Result: string;
TCPC: TIdTCPClient;
OnSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
TCPC := TIdTCPClient.Create();
try
OnSSL := TIdSSLIOHandlerSocketOpenSSL.Create(TCPC);
OnSSL.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
OnSSL.PassThrough := False;
OnSSL.DefStringEncoding := IndyTextEncoding_UTF8;
TCPC.Host := 'xxxxxxx.edu';
TCPC.Port := 443;
TCPC.ConnectTimeout := 100000;
TCPC.ReadTimeout := 500000;
TCPC.IOHandler := OnSSL;
TCPC.Connect;
try
TCPC.IOHandler.WriteLn('GET / HTTP/1.1');
TCPC.IOHandler.WriteLn('Host: xxxxxxx.edu');
TCPC.IOHandler.WriteLn('Connection: close');
TCPC.IOHandler.WriteLn('Pragma: no-cache');
TCPC.IOHandler.WriteLn('Cache-Control: no-cache');
TCPC.IOHandler.WriteLn('sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"');
TCPC.IOHandler.WriteLn('sec-ch-ua-mobile: ?0');
TCPC.IOHandler.WriteLn('sec-ch-ua-platform: "Windows"');
TCPC.IOHandler.WriteLn('Upgrade-Insecure-Requests: 1');
TCPC.IOHandler.WriteLn('User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36');
TCPC.IOHandler.Writeln('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9');
TCPC.IOHandler.WriteLn('Sec-Fetch-Site: none');
TCPC.IOHandler.WriteLn('Sec-Fetch-Mode: navigate');
TCPC.IOHandler.WriteLn('Sec-Fetch-User: ?1');
TCPC.IOHandler.WriteLn('Sec-Fetch-Dest: document');
//TCPC.IOHandler.WriteLn('Accept-Encoding: gzip, deflate, br');
TCPC.IOHandler.WriteLn('Accept-Language: en-US,en;q=0.9');
TCPC.IOHandler.WriteLn();
// I'm leaving this here only because I don't have the time right now
// to rewrite it properly. Go read my previous answers on this topic...
Result := TCPC.IOHandler.AllData();
logging(Result);
finally
TCPC.Disconnect;
end;
finally
TCPC.Free;
end;
end;
话虽这么说,你是对的,使用TIdHTTP会更简单,例如:
procedure TForm1.Button1Click(Sender: TObject);
var
Result: string;
HTTP: TIdHTTP;
OnSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
HTTP := TIdHTTP.Create();
try
OnSSL := TIdSSLIOHandlerSocketOpenSSL.Create(TCPC);
OnSSL.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
HTTP.ConnectTimeout := 100000;
HTTP.ReadTimeout := 500000;
HTTP.IOHandler := OnSSL;
HTTP.Request.Connection := 'close';
HTTP.Request.Pragma := 'no-cache';
HTTP.Request.CacheControl := 'no-cache';
HTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36';
HTTP.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9';
HTTP.Request.AcceptLanguage := 'en-US,en;q=0.9';
HTTP.Request.CustomHeaders.Values['sec-ch-ua'] :='" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"';
HTTP.Request.CustomHeaders.Values['sec-ch-ua-mobile'] := '?0';
HTTP.Request.CustomHeaders.Values['sec-ch-ua-platform'] := '"Windows"';
HTTP.Request.CustomHeaders.Values['Upgrade-Insecure-Requests'] := '1';
HTTP.Request.CustomHeaders.Values['Sec-Fetch-Site'] := 'none';
HTTP.Request.CustomHeaders.Values['Sec-Fetch-Mode'] := 'navigate';
HTTP.Request.CustomHeaders.Values['Sec-Fetch-User'] := '?1';
HTTP.Request.CustomHeaders.Values['Sec-Fetch-Dest'] := 'document';
// if you want to support compressed responses, assign a
// TIdZLibCompressorBase-derived component to the
// TIdHTTP.Compressor property...
Result := HTTP.Get('https://xxxxxxx.edu/');
logging(Result);
finally
HTTP.Free;
end;
end;
很少有理由TIdTCPClient直接使用而不是TIdHTTP.
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.08487606048584 seconds