V
Vadik(R)
Добрый вечер, форумчане!
Есть у меня такой вопрос. Как на низком уровне работать с https?
Мои попытки вот:
Хочу получить код link removed
Но сервер выдаёт такую ошибку: 400 The plain HTTP request was sent to HTTPS port
Предполагаю, что дело в том, что https-соединение защищено и прежде, чем делать запросы на получение кода, надо данные как-то зашифровать. И заранее об этом договориться с сервером, алгоритм шифрования, ключи...
Но я не знаю, какие именно надо прежде запросы делать.
Обычно смотрю, какие запросы надо делать через панель разработчика в Google Chrome. Но он ничего толкового в этот раз не подсказал, а с обычным http его всегда хватает.
Помогите, пожалуйста.
Есть у меня такой вопрос. Как на низком уровне работать с https?
Мои попытки вот:
Код:
program TestSSL;
{$APPTYPE CONSOLE}
uses
Dialogs, SysUtils, Windows, WinSock;
procedure SendText(S: TSocket; Buffer: AnsiString);
begin
send(S, Buffer[1], Length(Buffer), 0);
end;
procedure RecvText(S: TSocket; var Content: AnsiString);
var
Buffer: AnsiString;
Bytes: Integer;
begin
Content := '';
repeat
SetLength(Buffer, 8192);
Bytes := recv(S, Buffer[1], Length(Buffer), 0);
SetLength(Buffer, Bytes);
Content := Content + Buffer;
until Bytes = 0;
end;
var
Content: AnsiString;
S: TSocket;
SockAddr: TSockAddr;
WSAData: TWSAData;
begin
WSAStartup($202, WSAData);
SockAddr.sin_family := AF_INET;
SockAddr.sin_port := htons(443);
SockAddr.sin_addr.S_addr := inet_addr('69.58.188.34');
S := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
connect(S, SockAddr, SizeOf(TSockAddr));
Content := '';
Content := Content + 'GET / HTTP/1.1' + #13#10;
Content := Content + 'Host: bitly.com' + #13#10;
Content := Content + 'Connection: close' + #13#10;
Content := Content + 'User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17' + #13#10;
Content := Content + 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' + #13#10;
Content := Content + 'Accept-Encoding: gzip,deflate,sdch' + #13#10;
Content := Content + 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4' + #13#10;
Content := Content + 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3' + #13#10;
Content := Content + '' + #13#10;
SendText(S, Content);
RecvText(S, Content);
closesocket(S);
WSACleanup;
ShowMessage(Content);
end.
Но сервер выдаёт такую ошибку: 400 The plain HTTP request was sent to HTTPS port
Предполагаю, что дело в том, что https-соединение защищено и прежде, чем делать запросы на получение кода, надо данные как-то зашифровать. И заранее об этом договориться с сервером, алгоритм шифрования, ключи...
Но я не знаю, какие именно надо прежде запросы делать.
Обычно смотрю, какие запросы надо делать через панель разработчика в Google Chrome. Но он ничего толкового в этот раз не подсказал, а с обычным http его всегда хватает.
Помогите, пожалуйста.