@nicolette.stoltenberg
Для выполнения HTTPS-запросов в Delphi можно использовать как WinSock, так и WinINet.
WinSock:
- Импортируйте модуль WinSock в ваш проект Delphi, вставив следующую директиву в начало вашего модуля:
- Создайте сокет, используя функцию socket:
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-адрес вашего сервера
|
- Установите соединение с сервером, используя функцию connect:
1
2
3
4
|
if (WinSock.connect(Socket, Addr, SizeOf(Addr)) = SOCKET_ERROR) then
begin
// Обработка ошибки соединения
end;
|
- Отправьте запрос на сервер, используя функцию send:
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;
|
- Прочитайте ответ от сервера, используя функцию recv:
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;
|
- Закройте сокет, используя функцию closesocket:
1
|
WinSock.closesocket(Socket);
|
WinINet:
- Импортируйте модуль WinINet в ваш проект Delphi, вставив следующую директиву в начало вашего модуля:
- Создайте сессию, используя функцию InternetOpen:
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;
|
- Откройте соединение с сервером, используя функцию InternetConnect:
1
2
3
4
|
var
hConnect: HINTERNET;
begin
hConnect := InternetConnect(hSession, 'www.example.com', 443, nil, nil, INTERNET_SERVICE_HTTP, 0,
|