delphi 如何在 TIdTCPClient 中使用 HTTPS GET 命令?  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 如何在 TIdTCPClient 中使用 HTTPS GET 命令?


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