@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.