там шифрование, и его гемморно реализовывать. Проще заюзать готовые либы для работы с ним. Тогда от обычного http оно отличаться не будет.
Если действительно хочешь разобраться в теме и у тебя есть время и желание то вот: _http://tools.ietf.org/html/draft-ietf-tls-ssl-version3-00 _http://en.wikipedia.org/wiki/Secure_Sockets_Layer _http://tools.ietf.org/html/rfc2818 А если хочешь по-быстрому - то воспользуйся готовыми решениями: _http://www.brothersoft.com/ip-works-ssl-delphi-edition-download-132185.html _http://www.devart.com/sbridge/?gclid=CKr_6N6E-JoCFdMWzAod_Cysdw
есть особое мнение, что человек, способный с нуля написать ssl библиотеку, не будет задавать подобных вопросов. Уверен, что тебе нужен именно HTTPS запрос, а не, например, запрос к HTTPS-прокси?
Flenov, юзай библиотеки Chilkat Delphi ActiveX Components, очень просто всё реализуется и examples есть разные.)http://chilkatsoft.com
Вот тут компоненты для HTTP http://www.chilkatsoft.com/download/HttpActiveX.msi Вот экзампл, взятый с их сайта Code: uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CHILKATHTTPLib_TLB, OleCtrls; ... procedure TForm1.Button1Click(Sender: TObject); var http: TChilkatHttp; success: Integer; html: String; begin http := TChilkatHttp.Create(Self); // Any string unlocks the component for the 1st 30-days. success := http.UnlockComponent('Anything for 30-day trial'); if (success <> 1) then begin ShowMessage(http.LastErrorText); end; // Send the HTTP GET and return the content in a string. html := http.QuickGetStr('https://www.paypal.com/'); Memo1.Lines.Add(html); end;
это ActiveX библа! Ты её выбираешь в Import ActiveX Control и delphi сам компилит библу и устанавливает компоненты из неё. -> Любая версия
Вот типа тож пример от туда, но тут с кукисами как-то запарно реализовано, если они конешн тебе нужны будут вообще.. Code: uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CHILKATHTTPLib_TLB, OleCtrls; ... procedure TForm1.Button1Click(Sender: TObject); var req: TChilkatHttpRequest; http: TChilkatHttp; success: Integer; html: String; domain: String; port: Integer; ssl: Integer; resp: IChilkatHttpResponse; begin req := TChilkatHttpRequest.Create(Self); http := TChilkatHttp.Create(Self); // Any string unlocks the component for the 1st 30-days. success := http.UnlockComponent('Anything for 30-day trial'); if (success <> 1) then begin ShowMessage(http.LastErrorText); end; // Before doing the POST, do a simple GET for the purpose of obtaining a Cookie. // The Cookie contains a session-id and a session-id-time, and these values must // be current. // The CookieDir may be set to "memory" to keep an in-memory cache of cookies. // Alternatively, you may set it to a directory, such as "c:/temp/cookies". If you do that, // you can visually browse the cookies which will appear as XML files in the CookieDir. http.CookieDir := 'memory'; // Tell the HTTP component to save any cookies received. Also tell the component to // re-send cookies with subsequent GETs and POSTs. http.SendCookies := 1; http.SaveCookies := 1; // Do a GET to retrieve our Cookie... html := http.QuickGetStr('https://secure.amazon.com/exec/panama/seller-admin/manual-reports/get-report-status'); // Build an HTTP POST Request: req.UsePost(); req.Path := '/exec/panama/seller-admin/manual-reports/get-report-status'; // Setting your login/password causes Chilkat to automatically add the Authorization header: http.Login := 'YourLoginEmailAddress'; http.Password := 'YourPassword'; // NOTE: Do not explicitly add the Cookie header. It is added automatically by Chilkat HTTP. req.AddHeader('Content-Type','text/xml'); req.AddHeader('NumberofReports','2'); req.AddHeader('ReportName','OpenListingsLite'); // Send the HTTP POST and get the response. Note: This is a blocking call. // The method does not return until the full HTTP response is received. domain := 'secure.amazon.com'; port := 443; ssl := 1; resp := http.SynchronousRequest(domain,port,ssl,req.DefaultInterface); if (resp = nil ) then begin Memo1.Lines.Add(http.LastErrorText); end else begin // Display the XML returned. Memo1.Lines.Add(resp.BodyStr); end; end;
Извеняюсь за мат, но вы ебанулись. ну нахера копаться в SSL и компонентах если всё уже давно реализовано в стандартной либе wininet заголовочные файлы которой есть почти в любом языке. при то/V\, что это WinApi. Если юзать сокеты, то полюбому придется таскать SSL либы которые весять ппц сколько.
для тех кто в танке вот пример простой на дельфе/ Даже поддержка прокси есть. Кусок кривоватый, писался давно и наспех. Но работает. Code: uses wininet; function SendPOST(data,proxy_ip:string;proxy_port:word):string; var h_open:HINTERNET; h_connect:HINTERNET; h_request:HINTERNET; s,outs:string; l:integer; mas:array of char; begin result:='- InternetOpen'; if proxy_ip<>'' then h_open:=InternetOpen('Mozilla/5.0 (compatible; MSIE 6.0; SV1; MRA 4.8 (build 01705))',INTERNET_OPEN_TYPE_PROXY,Pansichar(proxy_ip+':'+inttostr(proxy_port)),nil,0) else h_open:=InternetOpen('Mozilla/5.0 (compatible; MSIE 6.0; SV1; MRA 4.8 (build 01705))',INTERNET_OPEN_TYPE_DIRECT,nil,nil,0); if h_open=nil then exit; //INTERNET_OPEN_TYPE_PRECONFIG какой удобно тот и юзайть //INTERNET_OPEN_TYPE_DIRECT result:='- InternetConnect'; h_connect:=InternetConnect(h_open,'SITE.RU',INTERNET_DEFAULT_HTTPS_PORT,nil,nil,INTERNET_SERVICE_HTTP,0,0); if h_connect=nil then exit; result:='- HttpOpenRequests'; h_request:=HttpOpenRequest(h_connect,'POST','/имя_скрипта','HTTP/1.0','SITE.RU',nil,INTERNET_FLAG_SECURE+INTERNET_FLAG_KEEP_CONNECTION,0); if h_request=nil then exit; lstrcpy(Pansichar(mas),Pansichar(data)); HttpSendRequest(h_request,'Content-Type: application/x-www-form-urlencoded', 47,mas,length(s)); setlength(mas,1024); outs:=''; repeat InternetReadFile(h_request,mas,1024,cardinal(l)); s:=copy(Pchar(mas),1,l); outs:=outs+s; until l<=0;
Уже писал и еще напишу что можно обычные сокеты + openssl Вообще не очень то и много весит, под никс при статической сборке где то + 500К.
Скачиваешь либсу с openssl.org и там в архиве в папке demos есть примеры. Ну это же не критично, если даже посмотреть на кроссплатформенные гиганты)