Skip to content

Commit 623e24a

Browse files
committed
update RU
1 parent ca7da52 commit 623e24a

File tree

1 file changed

+135
-13
lines changed

1 file changed

+135
-13
lines changed

docs/ru/manuals/http-requests.md

Lines changed: 135 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,176 @@
11
---
22
title: HTTP запросы
3-
brief: Данное руководство объясняет как делать HTTP запросы.
3+
brief: В этом руководстве объясняется, как выполнять HTTP запросы.
44
---
55

66
## HTTP запросы
77

8-
Defold может делать обыкновенные HTTP запросы с использованием функции `http.request()`.
8+
Defold может выполнять обычные HTTP запросы с помощью функции `http.request()`.
99

1010
### HTTP GET
1111

12-
Это самый базовый запрос, чтобы получить некие данные от сервера. Пример:
12+
Это самый базовый запрос для получения данных с сервера. Пример:
1313

14-
```Lua
14+
```lua
1515
local function handle_response(self, id, response)
1616
print(response.status, response.response)
1717
end
1818

1919
http.request("https://www.defold.com", "GET", handle_response)
2020
```
2121

22-
Данный код выполнит HTTP GET запрос на адрес https://www.defold.com. Эта функция асинхронна и она не заблокирует основной код по мере выполнения запроса. Как только запрос будет сделан и сервер отправит ответ, будет вызвана предоставленная функция обратного вызова. Функция обратного вызова получит полный ответ сервера, включая код статуса и заголовки ответа.
22+
Этот код выполнит HTTP GET запрос к https://www.defold.com. Функция асинхронная и не блокирует выполнение во время запроса. Когда запрос будет выполнен и сервер отправит ответ, будет вызвана переданная callback-функция. Функция обратного вызова получит полный ответ сервера, включая код состояния и заголовки ответа. Ниже приведена дополнительная информация о том, как работать с таблицей ответа.
2323

2424
::: sidenote
25-
HTTP запросы автоматически кэшируются на клиенте для повышения сетевой производительности. Кэшированные файлы хранятся по специфичному для каждой ОС пути в папке с именем `defold/http-cache`. Обычно вам не нужно беспокоиться о HTTP кэше, но если вам нужно очищать кэш во время разработки, вы можете вручную удалить папку, содержащую кэшированные файлы. На macOS эта папка располагается в `%HOME%/Library/Application Support/Defold/http-cache/`, а на Windows в `%APP_DATA%/defold/http-cache`.
25+
HTTP запросы автоматически кэшируются на клиенте для повышения производительности сети. Кэшированные файлы хранятся в зависящем от ОС пути поддержки приложения, в папке `defold/http-cache`. Обычно вам не нужно беспокоиться о HTTP кэше, но если во время разработки его нужно очистить, можно вручную удалить папку с кэшированными файлами. На macOS эта папка находится в `%HOME%/Library/Application Support/Defold/http-cache/`, а на Windows в `%APP_DATA%/defold/http-cache`.
2626
:::
2727

2828
### HTTP POST
2929

30-
Посылка данных, таких как очки или некие данные аутентификации, на сервер обычно делается через POST запросы:
30+
Когда нужно отправить данные, например результат или данные аутентификации, на сервер, обычно используется POST запрос:
31+
32+
```lua
33+
local function handle_response(self, id, response)
34+
print(response.status, response.response)
35+
end
36+
37+
local body = "12345"
38+
http.request("https://www.myserver.com/score", "POST", handle_response, nil, body)
39+
```
40+
41+
42+
### Другие HTTP методы
43+
44+
HTTP запросы Defold также поддерживают методы HEAD, DELETE и PUT. Метод CONNECT тоже поддерживается (см. раздел о прокси-подключениях ниже).
45+
46+
### Как работать с HTTP ответом
47+
48+
Таблица `response`, передаваемая в callback-функцию, содержит всю информацию, необходимую для детальной обработки ответа. Два ключевых поля это `status` и `response`:
49+
50+
```lua
51+
52+
local function handle_response(self, id, response)
53+
-- проверяем код состояния ответа. Распространенные коды:
54+
-- 200 OK - запрос успешно завершен
55+
-- 301 Moved permanently - запрошенные данные были перемещены, смотрите заголовок redirect
56+
-- 307 Temporary redirect - то же, что и выше
57+
-- 208 Permanent redirect - то же, что и выше
58+
-- 400 Bad Request - запрос был сформирован неверно
59+
-- 401 Unauthorized - клиент должен пройти аутентификацию
60+
-- 404 Not Found - сервер не может найти информацию
61+
-- https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status
62+
if response.status == 200 then
63+
-- данные ответа
64+
-- это может быть обычный текст, данные в формате json или бинарные данные
65+
print(response.response)
66+
json.decode(response.response)
67+
sys.save(..., response.response)
68+
end
69+
end
70+
```
71+
72+
Когда ответ содержит большой бинарный блок данных, например изображение или музыкальный трек, может иметь смысл записать данные в файл, а не загружать их в память:
73+
74+
```lua
75+
-- в этом примере мы загружаем myimage.png и сразу записываем его в файл на диске
76+
77+
local options = {
78+
path = sys.get_save_file("mygame", "myimage.png")
79+
}
80+
81+
local function handle_response(self, id, response)
82+
if response.status == 200 then
83+
print("Файл был успешно записан в:", response.path)
84+
print("Размер файла:", response.document_size)
85+
print("Путь к файлу:", response.path)
86+
else
87+
print("Файл не был записан на диск:", response.error)
88+
end
89+
end
90+
91+
http.request("https://www.foobar.com/myimage.png", "GET", handle_response)
92+
```
93+
94+
Еще один сценарий использования загрузки больших объемов данных по сети это потоковая передача звука, когда "фрагменты" звуковых данных загружаются по URL и передаются в звуковой ресурс. Полный пример можно найти в [руководстве по потоковой передаче звука](/sound-streaming#sound-streaming).
95+
96+
97+
### Заголовки запроса
98+
99+
При отправке запроса можно задавать дополнительные заголовки. Например, это можно использовать для установки заголовка авторизации или типа содержимого, чтобы сообщить серверу, в каком формате отправлены данные.
31100

32101
```Lua
33102
local function handle_response(self, id, response)
34103
print(response.status, response.response)
35104
end
36105

106+
-- отправляем данные формы
37107
local headers = {
38108
["Content-Type"] = "application/x-www-form-urlencoded"
39109
}
40-
local body = "foo=bar"
41-
http.request("https://httpbin.org/post", "POST", handle_response, headers, body)
110+
local body = "key1=value1&key2=value2"
111+
http.request("https://www.myserver.com/post", "POST", handle_response, headers, body)
112+
113+
-- отправляем данные, закодированные в json
114+
local headers = {
115+
["Content-Type"] = "application/json"
116+
}
117+
local body = json.encode({ key1 = value1, key2 = value2 })
118+
http.request("https://www.myserver.com/post", "POST", handle_response, headers, body)
119+
120+
-- запрашиваем данные, для доступа к которым требуется авторизация
121+
local token = ... -- генерируем токен доступа (JWT, OAuth и т.д.)
122+
local headers = {
123+
["Authorization"] = "Bearer " .. token
124+
}
125+
http.request("https://www.myserver.com/content", "GET", handle_response, headers)
42126
```
43127

44-
### Другие HTTP методы
128+
Defold автоматически устанавливает несколько заголовков запроса:
129+
130+
* `If-None-Match: <etag>` будет установлен с ETag любого ранее кэшированного ответа.
131+
* `Transfer-Encoding: chunked` будет установлен, если тело запроса больше 16384 байт.
132+
* `Content-Length` будет установлен с размером тела запроса (если запрос не использует chunked).
133+
* `Range: bytes=<from>-<to>` будет установлен при запросе частичного ответа, например при [потоковой передаче звука](/sound-streaming#sound-streaming).
134+
135+
136+
### Заголовки ответа
45137

46-
HTTP запросы в Defold также поддерживают методы HEAD, DELETE и PUT.
138+
Ответ сервера может содержать один или несколько заголовков ответа. Они доступны в таблице `response`:
139+
140+
```lua
141+
local function handle_response(self, id, response)
142+
for header,value in pairs(response.headers) do
143+
print(header, value)
144+
end
145+
end
146+
147+
http.request("https://www.defold.com", "GET", handle_response)
148+
```
149+
150+
151+
### HTTP Proxy
152+
153+
Иногда бывает нужно отправить запрос через прокси-сервер. Это можно сделать, указав прокси-сервер, который следует использовать при подключении к целевому серверу. Когда используется прокси, соединение с целевым сервером устанавливается через HTTP туннель через прокси. Этот HTTP туннель создается с помощью метода CONNECT. Пример:
154+
155+
156+
```lua
157+
-- подключаемся к www.defold.com через локальный прокси на порту 8888
158+
local url = "https://www.defold.com:443"
159+
local method = "GET"
160+
local headers = {}
161+
local post_data = nil
162+
local options = {
163+
proxy = "https://127.0.0.1:8888"
164+
}
165+
http.request(url, method, function(self, id, response)
166+
pprint(response)
167+
end, headers, post_data, options)
168+
```
47169

48170
### Справочник по API
49171

50-
Обратитесь к [Справочнику по API](/ref/http/) чтобы узнать больше.
172+
Обратитесь к [справочнику API](/ref/http/), чтобы узнать больше.
51173

52174
### Расширения
53175

54-
Альтернативную реализацию HTTP запросов можно найти здесь [TinyHTTP extension](https://defold.com/assets/tinyhttp/).
176+
Альтернативную реализацию HTTP запросов можно найти в [расширении TinyHTTP](https://defold.com/assets/tinyhttp/).

0 commit comments

Comments
 (0)