HttpService

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Brak możliwości tworzenia
Usługa

HttpService pozwala wysyłać żądania HTTP z serwerów gier za pomocą RequestAsync, GetAsync i PostAsync.Ta usługa pozwala na zintegrowanie gier z usługami internetowymi off-Roblox, takimi jak analityka, przechowywanie danych, konfiguracja zdalnego serwera, raportowanie o błędach, zaawansowane obliczenia lub komunikacja w czasie rzeczywistym.Ponadto kilka interfejsów API sieciowych Roblox można również uzyskać za pośrednictwem HttpService (patrz poniżej).

HttpService również domuje metody JSONEncode i JSONDecode, które są przydatne do komunikacji z usługami, które używają formatu JSON.Ponadto metoda GenerateGUID zapewnia losowe etykiety 128-bitowe, które mogą być traktowane jako prawdopodobnie unikalne w różnych scenariuszach.

Powinieneś wysyłać tylko prośby HTTP do zaufanych platform stron trzecich, aby uniknąć wystawienia swojego doświadczenia na ryzyko związane z bezpieczeństwem.

Właściwość ta nie może być interakcjonowana podczas wykonywania.

Włącz żądania HTTP

Metody wysyłania żądań nie są domyślnie włączone. Aby wysłać żądania, musisz włączyć żądania HTTP dla swojego doświadczenia.

Użyj w pluginach

HttpService może być używany przez wtyczki Studio.Mogą to zrobić, aby sprawdzić aktualizacje, wysłać dane o użytkowaniu, pobrać treści lub inną logikę biznesową.Po raz pierwszy, gdy wtyczka próbuje to zrobić, użytkownik może zostać poproszony o udzielenie wtyczce uprawnień do komunikowania się z określonym adresem internetowym.Użytkownik może zaakceptować, odrzucić i cofnąć takie uprawnienia w dowolnym momencie za pośrednictwem okna Zarządzanie wtyczkami .

Wtyczki mogą również komunikować się z innym oprogramowaniem uruchomionym na tym samym komputerze za pośrednictwem hostów localhost i 127.0.0.1.Wykonując programy kompatybilne z takimi pluginami, możesz rozszerzyć funkcjonalność swojego pluginu poza zwykłe możliwości Studio, takie jak interakcja z systemem plików komputera.Uważaj, aby takie oprogramowanie musiało być rozprowadzane oddzielnie od samego pluginu i może stanowić zagrożenie bezpieczeństwa, jeśli nie będziesz ostrożny.

Wzywanie domen Roblox

HttpService obecnie może wzywać tylko podzbiór końcówek chmury otwartej.Planujemy rozszerzyć ten zestaw w czasie, więc proszę użyć przycisku Feedback, jeśli masz określone końce, które chcesz zobaczyć:

Grupy
Magazyny danych

Ze względu na obecne ograniczenia w HttpService , tylko alfanumeryczne znaki i znak - są dozwolone w parametrach ścieżki URL do domen Roblox.Oznacza to, że sklepy danych/wejścia z innymi specjalnymi znakami są obecnie niedostępne z HttpService .

Przedmioty z ekwipunku
Sklep twórców

Możesz nazwać te końcówki w ten sam sposób, w jaki nazwałbyś każdą inną końcówkę za pomocą HttpService.Różnica polega na tym, że musisz dodać klucz Open Cloud API do żądania:

  1. Wyślij żądanie (przykład kodu poniżej).

Ograniczenia obejmują następujące elementy:

  • Wolne są tylko nagłówki x-api-key i content-type.
  • Tytuł x-api-key musi być Secret.
  • W dopuszczalne są tylko znaki alfanumeryczne i znak - w parametrach ścieżki URL.
  • Wspierany jest tylko protokół https:// .
Ograniczenie szybkości

Dla każdego serwera gier Roblox istnieje ograniczenie 500 żądań HTTP na minutę.Przekroczenie tego może spowodować, że metody wysyłania żądań staną całkowicie wstrzymane przez około 30 sekund.Twój pcall() może również zawieść z wiadomością o "Przekroczono limit liczby żądań".

  • Otwarte żądania chmury zużywają ten sam ogólny limit 500 żądań HTTP na minutę nałożony na wszystkie inne żądania.

  • Każdy punkt końcowy otwartej chmury ma swój własny limit na każdego właściciela klucza API (może to być użytkownik lub grupa) i jest egzekwowany bez względu na to, skąd pochodzą wezwania (HttpService , web itp.).Następujące nagłówki są zwracane z każdą odpowiedzią i pozwalają na wyświetlenie ograniczeń i pozostałej kwoty:

    • x-ratelimit-limit - Całkowita liczba żądań, które mogą być wykonane za pomocą każdego właściciela klucza API (zwykle na minutę).
    • x-ratelimit-remaining - Liczba żądań, których klucz API użył, jest nadal dozwolona.Jeśli ta liczba wynosi 0 i otrzymujesz kod stanu odpowiedzi HTTP 429, osiągnąłeś limit szybkości dla tego punktu końcowego.
    • x-ratelimit-reset - Liczba sekund pozostała przed zmianą limitu stawki (tj. przed x-ratelimit-remaining zmianą na x-ratelimit-limit ).
Dodatkowe rozważania
  • Istnieją ograniczenia portu.Nie możesz używać portu 1194 lub dowolnego portu poniżej 1024, z wyjątkiem 80 i 443.Jeśli próbujesz użyć zablokowanego portu, otrzymasz błąd 403 Forbidden lub ERR_ACCESS_DENIED.
  • Żądania sieciowe mogą zawodzić z wielu powodów, więc ważne jest, aby "kodować obronnie" (użyj pcall()) i mieć plan na wypadek, gdy żądania zawiodą.
  • Chociaż protokół http:// jest wspierany, powinieneś używać https:// gdziekolwiek to możliwe.
  • Wysłane żądania powinny zapewnić bezpieczną formę uwierzytelnienia, taką jak współdzielony wcześniej sekretny klucz, aby złe aktory nie mogły udawać się za jednym z twoich serwerów gier Roblox.
  • Bądź świadomy ogólnej pojemności i polityki ograniczania prędkości serwerów internetowych, do których wysyłane są żądania.

Przykłady kodu

This code sample uses HttpService's GetAsync to make a request to Open Notify, a web service that provides data from NASA. The request is made to an endpoint that provides information on how many astronauts are currently in space. The response is provided in JSON format, so it is parsed using JSONDecode. Finally, the response data is then processed and printed to the Output.

Test this script by pasting the source code into a Script (HttpService cannot be used by LocalScripts). Also, be sure to enable HTTP Requests in your Game Settings (Home > Game Settings).

Astronauts in Space

local HttpService = game:GetService("HttpService")
local URL_ASTROS = "http://api.open-notify.org/astros.json"
-- Make the request to our endpoint URL
local response = HttpService:GetAsync(URL_ASTROS)
-- Parse the JSON response
local data = HttpService:JSONDecode(response)
-- Information in the data table is dependent on the response JSON
if data.message == "success" then
print("There are currently " .. data.number .. " astronauts in space:")
for i, person in pairs(data.people) do
print(i .. ": " .. person.name .. " is on " .. person.craft)
end
end

This code sample uses HttpService's GetAsync to make a request to an endpoint at Open Notify, a website that provides information from NASA. The endpoint provides information on the current location of the International Space Station. This example uses a defensive coding technique that you should use when making web requests. It wraps the call to GetAsync and JSONDecode in pcall, which protects our script from raising an error if either of these fail. Then, it checks the raw response for all proper data before using it. All of this is put inside a function that returns true or false depending of the request's success.

Whenever you're working with web requests, you should prepare for anything to go wrong. Perhaps your web endpoint changes or goes down - you don't want your game scripts raising errors and breaking your game. You want to handle both success and failure gracefully - have a plan in case your data is not available. Use pcall and make plenty of validity checks (if statements) on your data to make sure you're getting exactly what you expect.

Where is the International Space Station?

local HttpService = game:GetService("HttpService")
-- Where is the International Space Station right now?
local URL_ISS = "http://api.open-notify.org/iss-now.json"
local function printISS()
local response
local data
-- Use pcall in case something goes wrong
pcall(function()
response = HttpService:GetAsync(URL_ISS)
data = HttpService:JSONDecode(response)
end)
-- Did our request fail or our JSON fail to parse?
if not data then
return false
end
-- Fully check our data for validity. This is dependent on what endpoint you're
-- to which you're sending your requests. For this example, this endpoint is
-- described here: http://open-notify.org/Open-Notify-API/ISS-Location-Now/
if data.message == "success" and data.iss_position then
if data.iss_position.latitude and data.iss_position.longitude then
print("The International Space Station is currently at:")
print(data.iss_position.latitude .. ", " .. data.iss_position.longitude)
return true
end
end
return false
end
if printISS() then
print("Success")
else
print("Something went wrong")
end

Pastebin.com is a website that allows users to paste text (usually source code) for others to view publicly. This code sample uses HttpService PostAsync and the pastebin web API to automatically create a new public paste on the website. Since pastebin's API is designed to take data in as a URL encoded string, the code uses a for-loop to turn the dataFields table into a URL encoded string, such as hello=world&foo=bar. This is used as the HTTP POST data.

Test this code by first going to pastebin.com/api#1 and getting an API key (you'll need a pastebin account to do this). Then, paste your unique developer API key into the field api_dev_key in the code sample's dataFields table. Fill in any other information about the post you want to make, then run this code in a Script (not a LocalScript). If all goes well, you'll get a URL to your new paste in the Output window (or some error string from pastebin).

New Pastebin Post

local HttpService = game:GetService("HttpService")
local URL_PASTEBIN_NEW_PASTE = "https://pastebin.com/api/api_post.php"
local dataFields = {
-- Pastebin API developer key from
-- https://pastebin.com/api#1
["api_dev_key"] = "FILL THIS WITH YOUR API DEVELOPER KEY",
["api_option"] = "paste", -- keep as "paste"
["api_paste_name"] = "HttpService:PostAsync", -- paste name
["api_paste_code"] = "Hello, world", -- paste content
["api_paste_format"] = "text", -- paste format
["api_paste_expire_date"] = "10M", -- expire date
["api_paste_private"] = "0", -- 0=public, 1=unlisted, 2=private
["api_user_key"] = "", -- user key, if blank post as guest
}
-- The pastebin API uses a URL encoded string for post data
-- Other APIs might use JSON, XML or some other format
local data = ""
for k, v in pairs(dataFields) do
data = data .. ("&%s=%s"):format(HttpService:UrlEncode(k), HttpService:UrlEncode(v))
end
data = data:sub(2) -- Remove the first &
-- Here's the data we're sending
print(data)
-- Make the request
local response = HttpService:PostAsync(URL_PASTEBIN_NEW_PASTE, data, Enum.HttpContentType.ApplicationUrlEncoded, false)
-- The response will be the URL to the new paste (or an error string if something was wrong)
print(response)

This code sample demonstrates sending a single HTTP PATCH request with JSON data to the Open Cloud Update Group Membership endpoint. Every Open Cloud endpoint requires adding your API key to the "x-api-key" header to receive a successful response. The generated API key must be stored as a Secret that can later be retrieved with HttpService:GetSecret("API KEY SECRET NAME").

Open Cloud via HttpService

-- Remember to set enable HTTP Requests in game settings!
local HttpService = game:GetService("HttpService")
local groupId = "your_group_id"
local membershipId = "your_membership_id"
local roleId = "your_role_id"
local function request()
local response = HttpService:RequestAsync({
Url = `https://apis.roblox.com/cloud/v2/groups/{groupId}/memberships/{membershipId}`, -- Updates a user's group membership
Method = "PATCH",
Headers = {
["Content-Type"] = "application/json", -- When sending JSON, set this!
["x-api-key"] = HttpService:GetSecret("APIKey"), -- Set in Creator Hub
},
Body = HttpService:JSONEncode({ role = `groups/{groupId}/roles/{roleId}` }),
})
if response.Success then
print("Status code:", response.StatusCode, response.StatusMessage)
print("Response body:\n", response.Body)
print("Response headers:\n", HttpService:JSONEncode(response.Headers))
else
print("The request failed:", response.StatusCode, response.StatusMessage)
end
end
-- Remember to wrap the function in a 'pcall' to prevent the script from breaking if the request fails
local success, message = pcall(request)
if not success then
print("Http Request failed:", message)
end

Podsumowanie

Właściwości

  • Zabezpieczenia użytkowników lokalnych
    Odczyt równoległy

    Wskazuje, czy żądania HTTP mogą być wysyłane do zewnętrznych stron internetowych.

Metody

Właściwości

HttpEnabled

Zabezpieczenia użytkowników lokalnych
Odczyt równoległy

Gdy ustawiono na true, pozwala skryptom wysyłać żądania do witryn za pomocą HttpService:GetAsync(), HttpService:PostAsync() i HttpService:RequestAsync().

Właściwość ta musi być przełączona za pośrednictwem interfejsu Ustawienia gry w Studio lub dla nieopublikowanych doświadczeń poprzez ustawienie tej właściwości na true za pomocą paska poleceń :

game:GetService("HttpService").HttpEnabled = true

Metody

GenerateGUID

Zapis równoległy

Ta metoda generuje losowy uniwersalnie unikalny identyfikator ( UUID ) strunę.Szesnaście oktetów UUID są reprezentowane jako 32 szesnastkowane (baza 16) cyfry, wyświetlane w pięciu grupach oddzielonych za pomocą spacji w formie 8-4-4-4-12 dla łącznie 36 znaków, na przykład 123e4567-e89b-12d3-a456-426655440000 .

Specyfikacja UUID używana jest wersja 4 (losowa), wariant 1 (DCE 1.1, ISO/IEC 11578:1996).UIDy tej wersji są najczęściej używane ze względu na swoją prostotę, ponieważ są całkowicie losowo generowane.Zauważ, że ta wersja nie ma pewnych funkcji, które mają inne wersje UUID, takich jak zakodowane znaczniki czasu, adresy MAC lub sortowanie w oparciu o czas, takie jak UUIDv7 lub ULID.

Istnieje ponad 5,3×10 36 unikalnych UUIDów v4, w których prawdopodobieństwo znalezienia powtórzenia w ciągu 103 bilionów UUIDów wynosi jedno na miliard.

Parametr wrapInCurlyBraces określa, czy zwrotiona struna jest owinięta w klamki ( {} ). Na przykład:

  • true : {94b717b2-d54f-4340-a504-bd809ef5bf5c}
  • false : db454790-7563-44ed-ab4b-397ff5df737b

Parametry

wrapInCurlyBraces: boolean

Czy powracająca struna powinna być owinięta w klamry krzywe ( {} ).

Wartość domyślna: true

Zwroty

Losowo generowany UUID.

Przykłady kodu

This example uses HttpService's GenerateGUID method to generate and print a universally unique identifier.

HttpService GenerateGUID

local HttpService = game:GetService("HttpService")
local result = HttpService:GenerateGUID(true)
print(result) --> Example output: {4c50eba2-d2ed-4d79-bec1-02a967f49c58}

GetSecret

Zapis równoległy

Ta metoda zwraca wartość dodaną wcześniej do sklepu z sekretami dla doświadczenia.Sekretna zawartość nie jest drukowana i niedostępna, gdy doświadczenie uruchamiane jest lokalnie.

Zwrócony Secret może zostać przekształcony za pomocą wbudowanych metod, takich jak Secret:AddPrefix(). Oczekuje się, że zostanie wysłany jako część żądania HTTP.

Dla więcej informacji, zobacz przewodnik użytkowania.

Parametry

key: string
Wartość domyślna: ""

Zwroty

JSONDecode

Variant
Zapis równoległy

Ta metoda przekształca obiekt JSON lub tablicę w Luau tablicę z następującymi cechami:

  • Klucze tabeli to struny lub liczby, ale nie oba. Jeśli obiekt JSON zawiera oba, klucze strun są ignorowane.
  • Pusty obiekt JSON generuje pustą tabelę Luau ( {} ).
  • Jeśli ciąg input nie jest ważnym obiektem JSON, metoda ta wyśle błąd.

Aby zakodować tablicę Luau w obiekt JSON, użyj metody HttpService:JSONEncode().

Ta metoda może być używana niezależnie od tego, czy włączone są żądania HTTP.

Parametry

input: string

Obiekt JSON jest dekodowany.

Wartość domyślna: ""

Zwroty

Variant

Zdekodowany obiekt JSON jako tabela Luau.

Przykłady kodu

This code sample gives an example JSON format string and parses it using HttpService's JSONDecode. It then verifies that the JSON was parsed correctly, and prints out some of the information within the object.

Try editing the JSON string to experiment with the format. Also experiment with inspecting the data in Lua to get comfortable with the Lua representation of the data (tables and other values).

HttpService JSONDecode

local HttpService = game:GetService("HttpService")
local jsonString = [[
{
"message": "success",
"info": {
"points": 120,
"isLeader": true,
"user": {
"id": 12345,
"name": "JohnDoe"
},
"past_scores": [50, 42, 95],
"best_friend": null
}
}
]]
local data = HttpService:JSONDecode(jsonString)
if data.message == "success" then
-- Since tab["hello"] and tab.hello are equivalent,
-- you could also use data["info"]["points"] here:
print("I have " .. data.info.points .. " points")
if data.info.isLeader then
print("I am the leader")
end
print("I have " .. #data.info.past_scores .. " past scores")
print("All the information:")
for key, value in pairs(data.info) do
print(key, typeof(value), value)
end
end

JSONEncode

Zapis równoległy

Ta metoda przekształca tabelę Luau w obiekt lub array JSON na podstawie następujących wytycznych:

  • Klucze tabeli muszą być albo ciągami albo liczbami. Jeśli tabela zawiera oba, priorytet ma arkusz (ignorowane są klucze ciągów).

  • Pusty stół Luau ( {} ) generuje pustą listę JSON.

  • Wartość nil nigdy nie jest generowana.

  • Referencje cyklicznych tabel powodują błąd.

    Ta metoda pozwala na wartości takie jak inf i nan, które nie są ważne JSON.Może to powodować problemy, jeśli chcesz używać wygenerowanego JSON gdzie indziej.

Aby odwrócić proces kodowania i zdekodować obiekt JSON, użyj metody HttpService:JSONDecode().

Ta metoda może być używana niezależnie od tego, czy włączone są żądania HTTP.

Parametry

input: Variant

Tabela wejściowa Luau.

Wartość domyślna: ""

Zwroty

Powracający ciąg JSON.

Przykłady kodu

This code sample turns a Lua table tab into a JSON string using HttpService's JSONEncode. Then, it prints out the string.

Try editing the Lua table to see how the JSON output changes.

HttpService JSONEncode

local HttpService = game:GetService("HttpService")
local tab = {
-- Remember: these lines are equivalent
--["message"] = "success",
message = "success",
info = {
points = 123,
isLeader = true,
user = {
id = 12345,
name = "JohnDoe",
},
past_scores = { 50, 42, 95 },
best_friend = nil,
},
}
local json = HttpService:JSONEncode(tab)
print(json)

UrlEncode

Zapis równoległy

Ta metoda koduje procentowo daną strunę tak, aby zarezerwowane znaki zostały poprawnie zakodowane za pomocą % i dwóch znaków dwunastkowych.

Jest to przydatne podczas formatowania URL-ów do użytku z HttpService:GetAsync() / HttpService:PostAsync() lub POST danymi typu mediów application/x-www-form-urlencoded ( Enum.HttpContentType.ApplicationUrlEncoded ).

Na przykład, gdy zakodujesz URL https://www.roblox.com/discover#/, metoda ta zwraca https%3A%2F%2Fwww%2Eroblox%2Ecom%2Fdiscover%23%2F.

Parametry

input: string

Sznurek (URL) do zakodowania.

Wartość domyślna: ""

Zwroty

Zaszyfrowana struna.

Przykłady kodu

Ten przykład kodu używa UrlEncode, aby zamienić ciąg na bezpieczny szyfrowany ciąg, który można użyć w URL jako argument.Zauważ, że tylko niezarezerwowane znaki (litery, cyfry i -_.~ ) nie są zamieniane na odpowiedniki kodowane w procentach.Znaki z akcentami są również przekształcane (na przykład é jest przekształcony w %C3 ).

HttpService Url encodeowanie

local HttpService = game:GetService("HttpService")
local content = "Je suis allé au cinéma." -- Francuski dla "poszedłem do kina"
local result = HttpService:UrlEncode(content)
print(result) --> Je%20suis%20all%C3%A9%20au%20cinema%2E

Pastebin.com is a website that allows users to paste text (usually source code) for others to view publicly. This code sample uses HttpService PostAsync and the pastebin web API to automatically create a new public paste on the website. Since pastebin's API is designed to take data in as a URL encoded string, the code uses a for-loop to turn the dataFields table into a URL encoded string, such as hello=world&foo=bar. This is used as the HTTP POST data.

Test this code by first going to pastebin.com/api#1 and getting an API key (you'll need a pastebin account to do this). Then, paste your unique developer API key into the field api_dev_key in the code sample's dataFields table. Fill in any other information about the post you want to make, then run this code in a Script (not a LocalScript). If all goes well, you'll get a URL to your new paste in the Output window (or some error string from pastebin).

New Pastebin Post

local HttpService = game:GetService("HttpService")
local URL_PASTEBIN_NEW_PASTE = "https://pastebin.com/api/api_post.php"
local dataFields = {
-- Pastebin API developer key from
-- https://pastebin.com/api#1
["api_dev_key"] = "FILL THIS WITH YOUR API DEVELOPER KEY",
["api_option"] = "paste", -- keep as "paste"
["api_paste_name"] = "HttpService:PostAsync", -- paste name
["api_paste_code"] = "Hello, world", -- paste content
["api_paste_format"] = "text", -- paste format
["api_paste_expire_date"] = "10M", -- expire date
["api_paste_private"] = "0", -- 0=public, 1=unlisted, 2=private
["api_user_key"] = "", -- user key, if blank post as guest
}
-- The pastebin API uses a URL encoded string for post data
-- Other APIs might use JSON, XML or some other format
local data = ""
for k, v in pairs(dataFields) do
data = data .. ("&%s=%s"):format(HttpService:UrlEncode(k), HttpService:UrlEncode(v))
end
data = data:sub(2) -- Remove the first &
-- Here's the data we're sending
print(data)
-- Make the request
local response = HttpService:PostAsync(URL_PASTEBIN_NEW_PASTE, data, Enum.HttpContentType.ApplicationUrlEncoded, false)
-- The response will be the URL to the new paste (or an error string if something was wrong)
print(response)

GetAsync

Wynik

Ta metoda wysyła żądanie HTTP GET.Funkcjonuje podobnie do RequestAsync() z wyjątkiem tego, że akceptuje parametry żądania HTTP jako parametry metody zamiast jednego słownika i zwraca tylko ciało odpowiedzi HTTP.Ogólnie rzecz biorąc, ta metoda jest przydatna tylko jako skrót i RequestAsync() powinna być stosowana w większości przypadków.

Gdy true , parametr nocache zapobiega przechowywaniu wyników metody z poprzednich wezwań za pomocą tego samego url.

Parametry

url: Variant

Adres URL, od którego żądasz danych.

Wartość domyślna: ""
nocache: boolean

Czy żądanie przechowuje (pamięta) odpowiedź.

Wartość domyślna: false
headers: Variant

Używany do określenia niektórych nagłówków żądań HTTP.

Wartość domyślna: ""

Zwroty

Ciało odpowiedzi na żądanie GET.

Przykłady kodu

This code sample uses HttpService's GetAsync to make a request to Open Notify, a web service that provides data from NASA. The request is made to an endpoint that provides information on how many astronauts are currently in space. The response is provided in JSON format, so it is parsed using JSONDecode. Finally, the response data is then processed and printed to the Output.

Test this script by pasting the source code into a Script (HttpService cannot be used by LocalScripts). Also, be sure to enable HTTP Requests in your Game Settings (Home > Game Settings).

Astronauts in Space

local HttpService = game:GetService("HttpService")
local URL_ASTROS = "http://api.open-notify.org/astros.json"
-- Make the request to our endpoint URL
local response = HttpService:GetAsync(URL_ASTROS)
-- Parse the JSON response
local data = HttpService:JSONDecode(response)
-- Information in the data table is dependent on the response JSON
if data.message == "success" then
print("There are currently " .. data.number .. " astronauts in space:")
for i, person in pairs(data.people) do
print(i .. ": " .. person.name .. " is on " .. person.craft)
end
end

This code sample uses HttpService's GetAsync to make a request to an endpoint at Open Notify, a website that provides information from NASA. The endpoint provides information on the current location of the International Space Station. This example uses a defensive coding technique that you should use when making web requests. It wraps the call to GetAsync and JSONDecode in pcall, which protects our script from raising an error if either of these fail. Then, it checks the raw response for all proper data before using it. All of this is put inside a function that returns true or false depending of the request's success.

Whenever you're working with web requests, you should prepare for anything to go wrong. Perhaps your web endpoint changes or goes down - you don't want your game scripts raising errors and breaking your game. You want to handle both success and failure gracefully - have a plan in case your data is not available. Use pcall and make plenty of validity checks (if statements) on your data to make sure you're getting exactly what you expect.

Where is the International Space Station?

local HttpService = game:GetService("HttpService")
-- Where is the International Space Station right now?
local URL_ISS = "http://api.open-notify.org/iss-now.json"
local function printISS()
local response
local data
-- Use pcall in case something goes wrong
pcall(function()
response = HttpService:GetAsync(URL_ISS)
data = HttpService:JSONDecode(response)
end)
-- Did our request fail or our JSON fail to parse?
if not data then
return false
end
-- Fully check our data for validity. This is dependent on what endpoint you're
-- to which you're sending your requests. For this example, this endpoint is
-- described here: http://open-notify.org/Open-Notify-API/ISS-Location-Now/
if data.message == "success" and data.iss_position then
if data.iss_position.latitude and data.iss_position.longitude then
print("The International Space Station is currently at:")
print(data.iss_position.latitude .. ", " .. data.iss_position.longitude)
return true
end
end
return false
end
if printISS() then
print("Success")
else
print("Something went wrong")
end

PostAsync

Wynik

Ta metoda wysyła żądanie HTTP POST.Funkcjonuje podobnie do RequestAsync() z wyjątkiem tego, że akceptuje parametry żądania HTTP jako parametry metody zamiast jednego słownika i zwraca tylko ciało odpowiedzi HTTP.Ogólnie rzecz biorąc, ta metoda jest przydatna tylko jako skrót i RequestAsync() powinna być stosowana w większości przypadków.

Kiedy true, parametr compress kontroluje, czy duże żądania będą skompresowane za pomocą gzip .

Parametry

url: Variant

Adres docelowy dla danych.

Wartość domyślna: ""
data: string

Dane wysyłane.

Wartość domyślna: ""
content_type: Enum.HttpContentType

Modyfikuje wartość w nagłówku Content-Type wysłanym z żądaniem.

Wartość domyślna: "ApplicationJson"
compress: boolean

Określa, czy dane są skompresowane ( zarchiwizowane ) podczas wysyłki.

Wartość domyślna: false
headers: Variant

Używany do określenia niektórych nagłówków żądań HTTP.

Wartość domyślna: ""

Zwroty

Odpowiedź HTTP wysłana z powrotem wskazująca wynik żądania.

Przykłady kodu

Pastebin.com is a website that allows users to paste text (usually source code) for others to view publicly. This code sample uses HttpService PostAsync and the pastebin web API to automatically create a new public paste on the website. Since pastebin's API is designed to take data in as a URL encoded string, the code uses a for-loop to turn the dataFields table into a URL encoded string, such as hello=world&foo=bar. This is used as the HTTP POST data.

Test this code by first going to pastebin.com/api#1 and getting an API key (you'll need a pastebin account to do this). Then, paste your unique developer API key into the field api_dev_key in the code sample's dataFields table. Fill in any other information about the post you want to make, then run this code in a Script (not a LocalScript). If all goes well, you'll get a URL to your new paste in the Output window (or some error string from pastebin).

New Pastebin Post

local HttpService = game:GetService("HttpService")
local URL_PASTEBIN_NEW_PASTE = "https://pastebin.com/api/api_post.php"
local dataFields = {
-- Pastebin API developer key from
-- https://pastebin.com/api#1
["api_dev_key"] = "FILL THIS WITH YOUR API DEVELOPER KEY",
["api_option"] = "paste", -- keep as "paste"
["api_paste_name"] = "HttpService:PostAsync", -- paste name
["api_paste_code"] = "Hello, world", -- paste content
["api_paste_format"] = "text", -- paste format
["api_paste_expire_date"] = "10M", -- expire date
["api_paste_private"] = "0", -- 0=public, 1=unlisted, 2=private
["api_user_key"] = "", -- user key, if blank post as guest
}
-- The pastebin API uses a URL encoded string for post data
-- Other APIs might use JSON, XML or some other format
local data = ""
for k, v in pairs(dataFields) do
data = data .. ("&%s=%s"):format(HttpService:UrlEncode(k), HttpService:UrlEncode(v))
end
data = data:sub(2) -- Remove the first &
-- Here's the data we're sending
print(data)
-- Make the request
local response = HttpService:PostAsync(URL_PASTEBIN_NEW_PASTE, data, Enum.HttpContentType.ApplicationUrlEncoded, false)
-- The response will be the URL to the new paste (or an error string if something was wrong)
print(response)

RequestAsync

Wynik

Ta metoda wysyła żądanie HTTP za pomocą słownika, aby określić dane żądania, takie jak docelowa URL, metoda, nagłówki i dane ciała żądania.Zwraca słownik, który opisuje otrzymane dane odpowiedzi.Opcjonalnie wniosek można skompresować za pomocą Enum.HttpCompression .

Żądaj pól słownika

<th>Typ</th>
<th>Wymagane</th>
<th>Opis</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Urł</code></td>
<td>Sznurek</td>
<td>tak</td>
<td>Celowa URL dla tej prośby. Musi używać protokołów <code>http</code> lub <code>https</code>.</td>
</tr>
<tr>
<td><code>Metoda</code></td>
<td>Sznurek</td>
<td>no</td>
<td>Metoda HTTP używana przez tę prośbę, najczęściej <code>GET</code> lub <code>POST</code>.</td>
</tr>
<tr>
<td><code>Tytuły</code></td>
<td>Słownik</td>
<td>no</td>
<td>Słownik nagłówków, które mają być używane z tym żądaniem. Większość nagłówków HTTP jest tutaj akceptowana, ale nie wszystkie.</td>
</tr>
<tr>
<td><code>Ciało</code></td>
<td>Sznurek</td>
<td>no</td>
<td>Ciało żądania.Może to być dowolna ciąg znaków, w tym dane binarne.Musi być wykluczony przy użyciu metod <code>ZDOBĄDŹ</code> lub <code>GŁOWA</code> HTTP.Może być konieczne określenie nagłówka <code>Typ treści</code> podczas wysyłania JSON lub innych formatów.</td>
</tr>
<tr>
<td><code>Zmniejsz</code></td>
<td><code>Enum.HttpKompresja</code></td>
<td>no</td>
<td>Opcjonalne pole kompresji, które skompresuje dane w żądaniu.Wartość może być <code>Enum.HttpCompression.None</code> lub <code>Enum.HttpCompression.Gzip</code>.</td>
</tr>
</tbody>
Nazwa
Wspierane metody HTTP

Metody żądań HTTP określają cel żądania i to, co oczekuje się, jeśli żądanie zostanie pomyślnie zrealizowane.Na przykład, metoda żądania GET informuje serwer na żądanym adresie, że zasób jest żądany, a jeśli się powiedzie, zasób na tym adresie zostanie zwrócony.Podobnie metoda żądania HEAD robi to samo, z wyjątkiem tego, że serwer wie, aby zwrócić odpowiedź bez elementu Body.


<th>Opis</th>
<th>Bezpieczny</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ZDOBĄDŹ</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/GET">ⓘ</a></td>
<td>Metoda <code>ZDOBĄDŹ</code> wymaga zasobu na określonym adresie. Nie wspiera użycia parametru <code>Ciało</code>.</td>
<td>Tak</td>
</tr>
<tr>
<td><code>GŁOWA</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/HEAD">ⓘ</a></td>
<td>Metoda <code>GŁOWA</code> wymaga odpowiedzi identycznej do wniosku <code>ZDOBĄDŹ</code>, ale bez ciała odpowiedzi.Nie wspiera użycia parametru <code>Ciało</code>.</td>
<td>Tak</td>
</tr>
<tr>
<td><code>POST</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/POST">ⓘ</a></td>
<td>Metoda <code>POST</code> przesyła dane <code>ciała</code> dostarczone do wskazanego adresu.</td>
<td>No</td>
</tr>
<tr>
<td><code>WŁĄCZ</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/PUT">ⓘ</a></td>
<td>Metoda <code>PUT</code> zastępuje wszystkie obecne iteracje zasobu określonego w danych <code>Body</code> dostarczonych.</td>
<td>No</td>
</tr>
<tr>
<td><code>Usuń</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/DELETE">ⓘ</a></td>
<td>Metoda <code>Usuń</code> usuwa zasób określony w danych <code>Ciało</code> dostarczonych na żądany adres.</td>
<td>No</td>
</tr>
<tr>
<td><code>OPCJE</code>    <a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/OPTIONS">ⓘ</a></td>
<td>Metoda <code>OPCJE</code> żąda dozwolonych opcji komunikacji dla podanego adresu.</td>
<td>Tak</td>
</tr>
<tr>
<td><code>ŚLAD</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/TRACE">ⓘ</a></td>
<td>Metoda <code>ŚLAD</code> wykonuje test pętli wiadomości wzdłuż ścieżki do zasobu określonego w danych <code>Ciało</code> dostarczonych.</td>
<td>Tak</td>
</tr>
<tr>
<td><code>Poprawka</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/PATCH">ⓘ</a></td>
<td>Metoda <code>PATCH</code> stosuje częściowe zmiany do zasobu określonego w dostarczonych danych <code>Body</code> na żądanym adresie.</td>
<td>No</td>
</tr>
</tbody>
Metoda
nagłówki HTTP

W słowniku żądań możesz określić niestandardowe nagłówki HTTP do użycia w żądaniu.Jednak niektóre nagłówki nie mogą być określone.Na przykład, Content-Length jest określony z ciała żądania.User-Agent i Roblox-Id są zamknięte przez Roblox.Inne nagłówki, takie jak Accept lub Cache-Control używają domyślnych wartości, ale mogą zostać anulowane.Częściej może się zdarzyć, że niektóre interfejsy API REST mogą wymagać określenia kluczy API lub innej autoryzacji usług w nagłówkach żądań.

Metoda RequestAsync() nie wykrywa formatu treści ciała.Wiele serwerów internetowych wymaga ustawienia nagłówka Content-Type odpowiednio przy wysyłaniu pewnych formatów.Inne metody korzystają z enum; dla tej metody ustaw należycie nagłowiek : , , > lub są wartościami nagłówka zastąpienia dla odpowiednich wartości enum.

Pola słownika odpowiedzi

RequestAsync() zwraca słownik zawierający następujące pola:


<th>Typ</th>
<th>Opis</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Pomyślny</code></td>
<td>Booleanowy</td>
<td>Status sukcesu żądania. Jest to prawda, jeśli i tylko jeśli <code>StatusCode</code> znajduje się w przedziale <code>200</code> - <code>299</code>.</td>
</tr>
<tr>
<td><code>Kod stanu</code></td>
<td>Liczba całkowita</td>
<td>Kod odpowiedzi HTTP identyfikujący stan odpowiedzi.</td>
</tr>
<tr>
<td><code>Message statusowy</code></td>
<td>Sznurek</td>
<td>Wiadomość o statusie, która została odesłana z powrotem.</td>
</tr>
<tr>
<td><code>Tytuły</code></td>
<td>Słownik</td>
<td>Słownik nagłówków, które zostały ustawione w tej odpowiedzi.</td>
</tr>
<tr>
<td><code>Ciało</code></td>
<td />
<td>Ciało żądania (treść) otrzymane w odpowiedzi.</td>
</tr>
</tbody>
Nazwa
Przypadki błędów

RequestAsync() wywołuje błąd, jeśli czas odpowiedzi wygasa lub jeśli serwer docelowy odrzuca żądanie.Jeśli usługa webowa zostanie wyłączona z jakiegoś powodu, może to spowodować, że skrypty korzystające z tej metody przestają działać w ogóle.Często dobrym pomysłem jest owinięcie wezwań do tej metody w pcall() i łagodne radzenie sobie z przypadkami awarii, jeśli wymagane informacje nie są dostępne.

Ograniczenia

Obecna ograniczenie wysyłania i odbierania żądań HTTP wynosi 500 żądań na minutę. Żądania powyżej tego progu nie powiodą się.

Parametry

requestOptions: Dictionary

Słownik zawierający informacje, które należy zażądać od wskazanego serwera.

Wartość domyślna: ""

Zwroty

Słownik zawierający informacje o odpowiedzi z wskazanego serwera.

Przykłady kodu

This code sample demonstrates sending a single HTTP POST request with JSON data to the website httpbin.org, a website that helps debug HTTP requests. Here, we send some JSON data by using HttpService:JSONEncode() and also setting the Content-Type header.

Sending an HTTP Request

-- Remember to set enable HTTP Requests in game settings!
local HttpService = game:GetService("HttpService")
local function request()
local response = HttpService:RequestAsync({
Url = "http://httpbin.org/post", -- This website helps debug HTTP requests
Method = "POST",
Headers = {
["Content-Type"] = "application/json", -- When sending JSON, set this!
},
Body = HttpService:JSONEncode({ hello = "world" }),
})
if response.Success then
print("Status code:", response.StatusCode, response.StatusMessage)
print("Response body:\n", response.Body)
else
print("The request failed:", response.StatusCode, response.StatusMessage)
end
end
-- Remember to wrap the function in a 'pcall' to prevent the script from breaking if the request fails
local success, message = pcall(request)
if not success then
print("Http Request failed:", message)
end

This code sample demonstrates sending a single HTTP PATCH request with JSON data to the Open Cloud Update Group Membership endpoint. Every Open Cloud endpoint requires adding your API key to the "x-api-key" header to receive a successful response. The generated API key must be stored as a Secret that can later be retrieved with HttpService:GetSecret("API KEY SECRET NAME").

Open Cloud via HttpService

-- Remember to set enable HTTP Requests in game settings!
local HttpService = game:GetService("HttpService")
local groupId = "your_group_id"
local membershipId = "your_membership_id"
local roleId = "your_role_id"
local function request()
local response = HttpService:RequestAsync({
Url = `https://apis.roblox.com/cloud/v2/groups/{groupId}/memberships/{membershipId}`, -- Updates a user's group membership
Method = "PATCH",
Headers = {
["Content-Type"] = "application/json", -- When sending JSON, set this!
["x-api-key"] = HttpService:GetSecret("APIKey"), -- Set in Creator Hub
},
Body = HttpService:JSONEncode({ role = `groups/{groupId}/roles/{roleId}` }),
})
if response.Success then
print("Status code:", response.StatusCode, response.StatusMessage)
print("Response body:\n", response.Body)
print("Response headers:\n", HttpService:JSONEncode(response.Headers))
else
print("The request failed:", response.StatusCode, response.StatusMessage)
end
end
-- Remember to wrap the function in a 'pcall' to prevent the script from breaking if the request fails
local success, message = pcall(request)
if not success then
print("Http Request failed:", message)
end

Zdarzenia