@nicolette.stoltenberg
Для выполнения HTTPS-запросов в Delphi можно использовать как WinSock, так и WinINet.
WinSock:
1
|
uses WinSock; |
1 2 3 4 5 6 7 8 9 10 |
var
Socket: TSocket;
Addr: TSockAddrIn;
begin
Socket := WinSock.socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if (Socket = INVALID_SOCKET) then
begin
// Обработка ошибки создания сокета
end;
end;
|
1 2 3 |
Addr.sin_family := AF_INET;
Addr.sin_port := htons(443); // 443 - это порт HTTPS
Addr.sin_addr.S_addr := inet_addr('127.0.0.1'); // IP-адрес вашего сервера
|
1 2 3 4 |
if (WinSock.connect(Socket, Addr, SizeOf(Addr)) = SOCKET_ERROR) then begin // Обработка ошибки соединения end; |
1 2 3 4 5 6 7 8 9 10 |
var
Request: string;
begin
Request := 'GET / HTTP/1.1'#13#10 +
'Host: www.example.com'#13#10#13#10;
if (WinSock.send(Socket, Request[1], Length(Request), 0) = SOCKET_ERROR) then
begin
// Обработка ошибки отправки запроса
end;
end;
|
1 2 3 4 5 6 7 8 9 10 |
var
Buffer: array[0..1023] of AnsiChar;
BytesReceived: Integer;
begin
BytesReceived := WinSock.recv(Socket, Buffer, SizeOf(Buffer), 0);
if (BytesReceived = SOCKET_ERROR) then
begin
// Обработка ошибки чтения ответа
end;
end;
|
1
|
WinSock.closesocket(Socket); |
WinINet:
1
|
uses WinINet; |
1 2 3 4 5 6 7 8 9 |
var
hSession: HINTERNET;
begin
hSession := InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if (hSession = nil) then
begin
// Обработка ошибки создания сессии
end;
end;
|
1 2 3 4 |
var hConnect: HINTERNET; begin hConnect := InternetConnect(hSession, 'www.example.com', 443, nil, nil, INTERNET_SERVICE_HTTP, 0, |
@nicolette.stoltenberg
0); if (hConnect = nil) then begin // Обработка ошибки создания соединения end; end;
Откройте запрос к серверу, используя функцию HttpOpenRequest:
1 2 3 4 5
var hRequest: HINTERNET; begin hRequest := HttpOpenRequest(hConnect, 'GET', '/', 'HTTP/1.1', nil, nil, INTERNET_FLAG_SECURE, 0); if (hRequest = nil) then begin // Обработка ошибки создания запроса end; end;
Отправьте запрос на сервер, используя функцию HttpSendRequest:
1 2 3 4
if not HttpSendRequest(hRequest, nil, 0, nil, 0) then begin // Обработка ошибки отправки запроса end;
Прочитайте ответ от сервера, используя функцию InternetReadFile:
1 2 3 4 5 6 7 8 9 10 11 12
var Buffer: array[0..1023] of Byte; BytesRead: DWORD; begin BytesRead := 0; repeat InternetReadFile(hRequest, @Buffer, SizeOf(Buffer), BytesRead); // Обработка полученных данных until BytesRead = 0; end;
Закройте запрос, соединение и сессию, используя функции InternetCloseHandle:
1 2 3 4 5
InternetCloseHandle(hRequest); InternetCloseHandle(hConnect); InternetCloseHandle(hSession);
Таким образом, вы можете выполнить HTTPS-запросы как с использованием WinSock, так и с использованием WinINet в Delphi.