HttpService

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Nicht erstellbar
Dienst

HttpService ermöglicht es, HTTP-Anfragen von Spielservern mit RequestAsync , GetAsync und PostAsync zu senden.Dieser Service ermöglicht es Spielen, mit Webdiensten von Roblox außerhalb von Roblox wie Analysen, Datenaufbewahrung, Remote-Serverkonfiguration, Fehlerberichterstattung, erweiterte Berechnungen oder Echtzeitkommunikation integriert zu werden.Zusätzlich können auch einige Roblox-Web-APIs über HttpService (siehe unten) abgerufen werden.

HttpService beherbergt auch die Methoden JSONEncode und JSONDecode, die für die Kommunikation mit Diensten, die die JSON -Format verwenden, verwendet werden.Darüber hinaus bietet die Methode GenerateGUID zufällige 128-Bit-Etiketten, die in einer Vielzahl von Szenarien als zufällig einzigartig betrachtet werden können.

Du solltest nur HTTP-Anfragen an vertrauenswürdige Drittplattformen senden, um deine Erfahrung vor Sicherheitsrisiken zu schützen.

Diese Eigenschaft kann zur Laufzeit nicht interagiert werden.

HTTP-Anfragen aktivieren

Anforderungsversendende Methoden sind standardmäßig nicht aktiviert. Um Anfragen zu senden, musst du HTTP-Anfragen aktivieren für dein Erlebnis.

Verwenden in Plugins

HttpService kann von Studio-Plugins verwendet werden.Sie können dies tun, um nach Updates zu suchen, Nutzungsdaten zu senden, Inhalte herunterzuladen oder andere Geschäftslogik durchzuführen.Das erste Mal, wenn ein Plugin dies versucht, kann der Benutzer aufgefordert werden, dem Plugin die Berechtigung zu geben, mit der bestimmten Webadresse zu kommunizieren.Ein Benutzer kann solche Berechtigungen jederzeit durch das Plugin-Management -Fenster akzeptieren, ablehnen und widerrufen.

Plugins können auch mit anderen Software auf demselben Computer durch die localhost und 127.0.0.1 Hosts kommunizieren.Durch die Ausführung von Programmen, die mit solchen Plugins kompatibel sind, kannst du die Funktionalität deines Plugins über die normalen Fähigkeiten von Studio hinaus erweitern, z. B. die Interaktion mit dem Dateisystem deines Computers.Achte darauf, dass solche Software separat vom Plugin selbst verteilt werden muss und Gefahren für die Sicherheit darstellen kann, wenn du nicht vorsichtig bist.

Roblox-Domänen aufrufen

HttpService kann derzeit nur einen Teil der Open Cloud-Endpunkte aufrufen.Wir planen, dieses Set im Laufe der Zeit zu erweitern, also verwenden Sie bitte die Feedback-Schaltfläche, wenn Sie spezifische Endpunkte haben, die Sie sehen möchten:

Gruppen
Datenspeicher

Aufgrund der derzeitigen Einschränkungen auf HttpService ist nur der alphanumerische Charakter und der - Zeichencharakter in URL-Pfadparametern für Roblox-Domänen erlaubt.Das bedeutet, dass Datenspeicher/Einträge mit anderen speziellen Zeichen derzeit nicht von HttpService zugänglich sind.

Inventarartikel
Creator-Store

Sie können diese Endpunkte auf die gleiche Weise anrufen, wie Sie jeden anderen Endpunkt über HttpService anrufen würden.Der einzige Unterschied besteht darin, dass Sie einen Open Cloud API-Schlüssel in der Anfrage enthalten müssen:

  1. Stelle die Anfrage (Code-Beispiel unten).

Beschränkungen umfassen Folgendes:

  • Nur die x-api-key- und content-type-Header sind erlaubt.
  • Der x-api-key Kopfzeile muss eine Secret sein.
  • Nur alphanumerische Zeichen und der - -Zeichen sind in URL-Pfad parameters erlaubt.
  • Nur das https://-Protokoll wird unterstützt.
Begrenzung der Rate

Für jeden Roblox-Spielserver gibt es ein Limit von 500 HTTP-Anfragen pro Minute.Das Überschreiten kann dazu führen, dass Anforderungsversendemethoden für etwa 30 Sekunden vollständig ausfallen.Deine pcall() kann auch mit einer Nachricht von "Anzahl der Anfragen überschrittenes Limit" fehlschlagen.

  • Öffentliche Cloud-Anfragen verbrauchen dasselbe Gesamtlimit von 500 HTTP-Anfragen pro Minute, die auf alle anderen Anfragen auferlegt wird.

  • Jeder Open Cloud-Endpunkt hat sein eigenes Limit pro API-Schlüsselbesitzer (kann ein Benutzer oder eine Gruppe sein), das unabhängig davon durchgesetzt wird, von wo die Anrufe kommen ( HttpService , das Web usw.).Die folgenden Überschriften werden mit jeder Antwort zurückgegeben und ermöglichen es Ihnen, die Grenzen und Ihre verbleibende Quote anzuzeigen:

    • x-ratelimit-limit - Die Gesamtzahl der Anfragen, die pro API-Schlüsselbesitzer gemacht werden dürfen (normalerweise pro Minute).
    • x-ratelimit-remaining - Die Anzahl der Anfragen, die der API-Schlüssel verwendet hat, ist immer noch erlaubt zu machen.Wenn diese Zahl 0 ist und du eine HTTP-429-Antwortstatuscode erhältst, hast du das Ratelimit für diesen Endpunkt erreicht.
    • x-ratelimit-reset - Die Anzahl der Sekunden, die übrig sind, bevor das Ratelimit zurückgesetzt wird (d.h. bevor x-ratelimit-remaining auf x-ratelimit-limit zurückgesetzt wird).
Zusätzliche Überlegungen
  • Es gibt Hafteinschränkungen.Du kannst den Port nicht verwenden 1194 oder einen Port unter 1024 , außer 80 und 443.Wenn du versuchst, einen blockierten Port zu verwenden, erhältst du entweder einen 403 Forbidden oder ERR_ACCESS_DENIED Fehler.
  • Webanfragen können aus vielen Gründen fehlschlagen, daher ist es wichtig, "defensiv zu codieren" (benutze pcall() ) und einen Plan für den Fall zu haben, dass Anfragen fehlschlagen.
  • Obwohl das http://Protokoll unterstützt wird, solltest du https:// überall verwenden, wo es möglich ist.
  • Senden von Anfragen sollte eine sichere Authentifizierungsform bieten, wie z. B. einen vorab geteilten geheimen Schlüssel, damit schlechte Akteure sich nicht als einer deiner Roblox-Spielserver ausgeben können.
  • Seien Sie sich der allgemeinen Kapazitäts- und Auslastungspolitik der Webserver bewusst, an die Anfragen gesendet werden.

Code-Beispiele

Dieses Codebeispiel verwendet HttpService's GetAsync, um eine Anfrage an Open Notify zu stellen, einen Webservice, der Daten von der NASA bereitstellt.Die Anfrage wird an einen Endpunkt gerichtet, der Informationen darüber liefert, wie viele Astronauten derzeit im Weltraum sind.Die Antwort wird im JSON-Format bereitgestellt, so dass sie mit JSONDecode dekodiert wird.Schließlich werden die Antwortdaten dann verarbeitet und gedruckt auf die Ausgabe.

Testen Sie dieses Skript, indem Sie den Quellcode in ein Skript einfügen (HttpService kann nicht von lokalen Skripten verwendet werden).Aktiviere auch HTTP-Anfragen in deinen Spiel-Einstellungen (Home > Spiel-Einstellungen).

Astronauten im Weltraum

local HttpService = game:GetService("HttpService")
local URL_ASTROS = "http://api.open-notify.org/astros.json"
-- Stelle die Anfrage an unsere Endpunkt-URL
local response = HttpService:GetAsync(URL_ASTROS)
-- Die JSON-Antwort parsen
local data = HttpService:JSONDecode(response)
-- Die Informationen in der Datenbank sind von der Antwort-JSON abhängig
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("The response was successful:", response.StatusCode, response.StatusMessage)
else
print("The response returned an error:", response.StatusCode, response.StatusMessage)
end
print("Response body:\n", response.Body)
print("Response headers:\n", HttpService:JSONEncode(response.Headers))
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("The Http request failed to send:", message)
end

Zusammenfassung

Eigenschaften

  • Lokale Nutzersicherheit
    Parallel lesen

    Weist darauf hin, ob HTTP-Anfragen an externe Websites gesendet werden können.

Methoden

Eigenschaften

HttpEnabled

Lokale Nutzersicherheit
Parallel lesen

Wenn auf true festgelegt, können Skripte Anfragen an Websites senden, die HttpService:GetAsync() , HttpService:PostAsync() und HttpService:RequestAsync() verwenden.

Diese Eigenschaft muss durch das Spiele-Einstellungen-Interface in Studio oder für unveröffentlichte Erlebnisse durch Festlegen dieser Eigenschaft auf true mit der Befehlsleiste verwendet werden:

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

Methoden

GenerateGUID

Parallel schreiben

Diese Methode erzeugt einen zufälligen universell einzigartigen Identifikator (UUID).Die sechzehn Bytes eines UUID werden als 32 hexadezimale (Basis 16) Zahlen dargestellt, die in fünf Gruppen mit Leerstellen getrennt in der Form 8-4-4-4-12 für insgesamt 36 Zeichen angezeigt werden, zum Beispiel 123e4567-e89b-12d3-a456-426655440000 .

Die verwendete UUID-Spezifikation ist Version 4 (zufällig), Variante 1 (DCE 1.1, ISO/IEC 11578:1996).UUIDs dieser Version werden wegen ihrer Einfachheit am häufigsten verwendet, da sie vollständig zufällig generiert werden.Beachten Sie, dass diese Version nicht bestimmte Funktionen hat, die andere UUID-Versionen haben, wie z. B. verschlüsselte Zeitmarken, MAC-Adressen oder zeitbasierte Sortierung wie UUIDv7 oder ULID.

Es gibt über 5.3×10 36 einzigartige v4 UUIDs, in denen die Wahrscheinlichkeit, innerhalb von 103 Trillionen UUIDs eine Duplikation zu finden, eine von einer Milliarde ist.

Das wrapInCurlyBraces Argument bestimmt, ob die zurückgegebene Zeichenkette in runden Klammern ( {} ) eingeschlossen ist. Zum Beispiel:

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

Parameter

wrapInCurlyBraces: boolean

Ob die zurückgegebene Zeichenkette in runden Klammern ( {} ) eingeschlossen werden sollte.

Standardwert: true

Rückgaben

Die zufällig generierte UUID.

Code-Beispiele

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

Parallel schreiben

Diese Methode gibt einen Wert zurück, der zuvor dem Geheimnisspeicher für das Erlebnis hinzugefügt wurde.Der geheime Inhalt ist nicht druckbar und nicht verfügbar, wenn die Erfahrung lokal ausgeführt wird.

Die zurückgegebene Secret kann mit eingebauten Methoden wie Secret:AddPrefix() transformiert werden. Es wird erwartet, dass sie als Teil einer HTTP-Anfrage gesendet wird.

Für weitere Informationen, siehe den Verwendungsleitfaden.

Parameter

key: string
Standardwert: ""

Rückgaben

JSONDecode

Variant
Parallel schreiben

Diese Methode transformiert ein JSON-Objekt oder -Array in eine Luau-Tabelle mit den folgenden Merkmalen:

  • Schlüssel der Tabelle sind Zeichenketten oder Zahlen, aber nicht beides. Wenn ein JSON-Objekt beides enthält, werden Zeichenschlüssel ignoriert.
  • Ein leeres JSON-Objekt erzeugt eine leere Luau-Tabelle ( {} ).
  • Wenn der input Saitz nicht ein gültiges JSON-Objekt ist, wird diese Methode einen Fehler werfen.

Um einen Luau-Tisch in ein JSON-Objekt zu codieren, verwende die HttpService:JSONEncode()-Methode.

Diese Methode kann unabhängig davon verwendet werden, ob HTTP-Anfragen aktiviert sind.

Parameter

input: string

Das JSON-Objekt wird dekodiert.

Standardwert: ""

Rückgaben

Variant

Das dekodierte JSON-Objekt als Luau-Tabelle.

Code-Beispiele

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

Parallel schreiben

Diese Methode transformiert eine Luau-Tabelle in ein JSON-Objekt oder -Array auf der Grundlage der folgenden Richtlinien:

  • Die Schlüssel der Tabelle müssen entweder Zeichenketten oder Zahlen sein. Wenn eine Tabelle beides enthält, wird ein Array bevorzugt (Schlüsselzeichen werden ignoriert).

  • Ein leerer Luau-Tisch ( {} ) erzeugt eine leere JSON-Liste.

  • Der Wert nil wird nie generiert.

  • Zyklische Tabellenbezüge verursachen einen Fehler.

    Diese Methode erlaubt Werte wie inf und nan, die keine gültigen JSON sind.Dies kann Probleme verursachen, wenn du das ausgegebene JSON anderswo verwenden möchtest.

Um den Verschlüsselungsprozess umzukehren und ein JSON-Objekt zu dekodieren, verwende die HttpService:JSONDecode()-Methode.

Diese Methode kann unabhängig davon verwendet werden, ob HTTP-Anfragen aktiviert sind.

Parameter

input: Variant

Der Eingabentisch Luau.

Standardwert: ""

Rückgaben

Der zurückgegebene JSON-String.

Code-Beispiele

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

Parallel schreiben

Diese Methode prozentcodiert einen bestimmten String, so dass reservierte Zeichen ordnungsgemäß mit % und zwei hexadezimalen Zeichen kodiert werden.

Dies ist nützlich, wenn URLs für die Verwendung mit HttpService:GetAsync() / HttpService:PostAsync() oder POST Daten des Medientyps application/x-www-form-urlencoded ( Enum.HttpContentType.ApplicationUrlEncoded ) formatiert werden.

Zum Beispiel, wenn du die URL https://www.roblox.com/discover#/ codierst, gibt diese Methode https%3A%2F%2Fwww%2Eroblox%2Ecom%2Fdiscover%23%2F zurück.

Parameter

input: string

Die Zeichenkette (URL), um zu verschlüsseln.

Standardwert: ""

Rückgaben

Der verschlüsselte String.

Code-Beispiele

Dieses Codebeispiel verwendet UrlEncode, um eine Zeichenfolge in eine sichere, prozentcodierte Zeichenfolge umzuwandeln, die in einer URL als Argument verwendet werden kann.Beachten Sie, dass nur unreservierte Zeichen (Buchstaben, Zahlen und -_.~ ) nicht in Prozentschrift-Äquivalente umgewandelt werden.Zeichen mit Akzenten werden ebenfalls transformiert (zum Beispiel é wird in %C3 transformiert).

HttpService UrlEncode

local HttpService = game:GetService("HttpService")
local content = "Je suis allé au cinéma." -- Französisch für "Ich bin ins Kino gegangen"
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

Angehalten

Diese Methode sendet eine HTTP-Anfrage GET.Es funktioniert ähnlich wie RequestAsync() außer dass es HTTP-Anfrage参数 als Methode参数 anstelle einer einzigen Diktion akzeptiert und nur den Körper der HTTP-Antwort zurückgibt.Im Allgemeinen ist diese Methode nur als Kurzform nützlich und RequestAsync() sollte in den meisten Fällen verwendet werden.

Wenn true , verhindert der nocache -Parameter, dass diese Methode Ergebnisse aus früheren Aufrufen mit demselben url speichert.

Parameter

url: Variant

Die Webadresse, von der du Daten anfordern.

Standardwert: ""
nocache: boolean

Ob die Anfrage (Speicher) die Antwort speichert.

Standardwert: false
headers: Variant

Wird verwendet, um einige HTTP-Anforderungsköpfe zu spezifizieren.

Standardwert: ""

Rückgaben

Der Antwortkörper der GET-Anforderung.

Code-Beispiele

Dieses Codebeispiel verwendet HttpService's GetAsync, um eine Anfrage an Open Notify zu stellen, einen Webservice, der Daten von der NASA bereitstellt.Die Anfrage wird an einen Endpunkt gerichtet, der Informationen darüber liefert, wie viele Astronauten derzeit im Weltraum sind.Die Antwort wird im JSON-Format bereitgestellt, so dass sie mit JSONDecode dekodiert wird.Schließlich werden die Antwortdaten dann verarbeitet und gedruckt auf die Ausgabe.

Testen Sie dieses Skript, indem Sie den Quellcode in ein Skript einfügen (HttpService kann nicht von lokalen Skripten verwendet werden).Aktiviere auch HTTP-Anfragen in deinen Spiel-Einstellungen (Home > Spiel-Einstellungen).

Astronauten im Weltraum

local HttpService = game:GetService("HttpService")
local URL_ASTROS = "http://api.open-notify.org/astros.json"
-- Stelle die Anfrage an unsere Endpunkt-URL
local response = HttpService:GetAsync(URL_ASTROS)
-- Die JSON-Antwort parsen
local data = HttpService:JSONDecode(response)
-- Die Informationen in der Datenbank sind von der Antwort-JSON abhängig
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

Angehalten

Diese Methode sendet eine HTTP-Anfrage POST.Es funktioniert ähnlich wie RequestAsync() außer dass es HTTP-Anfrage参数 als Methode参数 anstelle einer einzigen Diktion akzeptiert und nur den Körper der HTTP-Antwort zurückgibt.Im Allgemeinen ist diese Methode nur als Kurzform nützlich und RequestAsync() sollte in den meisten Fällen verwendet werden.

Wenn true , steuert der compress -Parameter, ob große Anforderungskörper mit gzip komprimiert werden.

Parameter

url: Variant

Die Zieladresse für die Daten.

Standardwert: ""
data: string

Die gesendeten Daten.

Standardwert: ""
content_type: Enum.HttpContentType

Modifiziert den Wert im Content-Type-Header, der mit der Anfrage gesendet wird.

Standardwert: "ApplicationJson"
compress: boolean

Bestimmt, ob die Daten beim Versenden komprimiert sind ( zippiert ) oder nicht.

Standardwert: false
headers: Variant

Wird verwendet, um einige HTTP-Anforderungsköpfe zu spezifizieren.

Standardwert: ""

Rückgaben

Die HTTP-Antwort, die zurückgesendet wird und das Ergebnis der Anfrage anzeigt.

Code-Beispiele

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

Angehalten

Diese Methode sendet eine HTTP-Anfrage mit einem Wörterbuch, um die Anforderungsdaten wie die Ziel-URL, die Methode, die Kopfzeilen und die Körperdaten der Anforderung anzugeben.Es gibt eine Rückgabe eines Wörterbuchs, das die empfangenen Antwortdaten beschreibt.Optional kann die Anfrage mit Enum.HttpCompression komprimiert werden.

Wörterbuchfelder anfordern

<th>Typ</th>
<th>Erforderlich</th>
<th>Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Urlaub</code></td>
<td>Schnur</td>
<td>nein</td>
<td>Die Ziel-URL für diese Anfrage. Muss <code>http</code> oder <code>https</code> Protokolle verwenden.</td>
</tr>
<tr>
<td><code>Methode</code></td>
<td>Schnur</td>
<td>no</td>
<td>Die HTTP-Methode, die von dieser Anfrage verwendet wird, meistens <code>GET</code> oder <code>POST</code>.</td>
</tr>
<tr>
<td><code>Kopfzeilen</code></td>
<td>Wörterbuch</td>
<td>no</td>
<td>Ein Wörterbuch von Headern, die mit dieser Anfrage verwendet werden. Die meisten HTTP-Header werden hier akzeptiert, aber nicht alle.</td>
</tr>
<tr>
<td><code>Körper</code></td>
<td>Schnur</td>
<td>no</td>
<td>Der Anforderungskörper.Kann jede Zeiche sein, einschließlich binärer Daten.Muss beim Verwenden der <code>GET</code>- oder <code>HEAD</code>-HTTP-Methoden ausgeschlossen werden.Es kann notwendig sein, den <code>Inhaltstyp</code>-Header anzugeben, wenn JSON oder andere Formate gesendet werden.</td>
</tr>
<tr>
<td><code>Komprimieren</code></td>
<td><code>Enum.HttpCompression</code></td>
<td>no</td>
<td>Ein optionales Komprimierungsfeld, das die Daten in der Anfrage komprimiert.Der Wert kann entweder <code>Enum.HttpCompression.None</code> oder <code>Enum.HttpCompression.Gzip</code> sein.</td>
</tr>
</tbody>
Namen
Unterstützte HTTP-Methoden

Die HTTP-Anforderungs Methoden geben den Zweck der Anforderung an und was erwartet wird, wenn die Anforderung erfolgreich ist.Die GET-Anforderungsmethode zum Beispiel sagt dem Server an der angeforderten Adresse, dass eine Ressource angefordert wird, und wenn sie erfolgreich ist, wird die Ressource an dieser Adresse zurückgegeben.Ebenso macht die HEAD Anforderungs-Methode dasselbe, außer der Server weiß, eine Antwort ohne Body Element zurückzugeben.


<th>Beschreibung</th>
<th>Sicher</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ERHALTEN</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/GET">ⓘ</a></td>
<td>Die <code>GET</code>-Methode fordert die Ressource an der angegebenen Adresse an. Unterstützt nicht die Verwendung des <code>Körper</code>- Parameters.</td>
<td>Nein</td>
</tr>
<tr>
<td><code>KOPF</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/HEAD">ⓘ</a></td>
<td>Die <code>HEAD</code>-Methode fordert eine Antwort, die identisch zu einer <code>GET</code>-Anfrage ist, aber ohne Antwortkörper.Unterstützt nicht die Verwendung des <code>Körper</code>- Parameters.</td>
<td>Nein</td>
</tr>
<tr>
<td><code>POSTEN</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/POST">ⓘ</a></td>
<td>Die <code>POST</code>-Methode sendet die angegebenen <code>Körper</code>-Daten an die angeforderte Adresse.</td>
<td>No</td>
</tr>
<tr>
<td><code>PUT</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/PUT">ⓘ</a></td>
<td>Die <code>PUT</code>-Methode ersetzt alle aktuellen Iterationen der angegebenen Ressource innerhalb der bereitgestellten <code>Körper</code>-Daten.</td>
<td>No</td>
</tr>
<tr>
<td><code>LÖSCHEN</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/DELETE">ⓘ</a></td>
<td>Die <code>LÖSCHEN</code>-Methode löscht die angegebene Ressource in den angegebenen <code>Körper</code>-Daten an der angeforderten Adresse.</td>
<td>No</td>
</tr>
<tr>
<td><code>OPTIONEN</code>    <a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/OPTIONS">ⓘ</a></td>
<td>Die <code>OPTIONEN</code>-Methode fordert die zulässigen Kommunikationsoptionen für die angegebene Adresse an.</td>
<td>Nein</td>
</tr>
<tr>
<td><code>TRACE</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/TRACE">ⓘ</a></td>
<td>Die Methode <code>TRACE</code> führt einen Nachrichten-Loop-Back-Test entlang des Weges zur angegebenen Ressource durch, die in den bereitgestellten <code>Körper</code>-Daten angegeben ist.</td>
<td>Nein</td>
</tr>
<tr>
<td><code>PATCH</code><a href="https://developer.mozilla.org/docs/Web/HTTP/Methods/PATCH">ⓘ</a></td>
<td>Die <code>PATCH</code>-Methode wendet teilweise Änderungen an die angegebene Ressource an, die in den mitgelieferten <code>Körper</code>-Daten an der angeforderten Adresse angegeben ist.</td>
<td>No</td>
</tr>
</tbody>
Methode
HTTP-Header

Im Anforderungsdiktion können Sie benutzerdefinierte HTTP-Header spezifizieren, die für die Anfrage verwendet werden.Einige Kopfzeilen können jedoch nicht angegeben werden.Zum Beispiel wird Content-Length aus dem Request-Körper bestimmt.User-Agent und Roblox-Id sind von Roblox gesperrt.Andere Überschriften wie Accept oder Cache-Control verwenden Standardwerte, können aber überschrieben werden.Häufiger können einige REST-APIs API-Schlüssel oder andere Service-Authentifizierung in Anfrage-Header angegeben werden müssen.

Die Methode RequestAsync() erkennt das Format des Körperinhalts nicht.Viele Webserver erfordern, dass der Content-Type Kopfzeile beim Versenden bestimmter Formate angemessen gesetzt wird, wenn bestimmte Formate gesendet werden.Andere Methoden von verwenden die Enum; für diese Methode legen Sie den Kopfzeilen entsprechend fest: , , , oder sind Ersetzungskopfzeilen für die jeweiligen Enum-Werte.

Antwort-Wörterbuch-Felder

RequestAsync() gibt eine diktion zurück, die die folgenden felder enthält:


<th>Typ</th>
<th>Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Erfolg</code></td>
<td>Boolesisch</td>
<td>Der Erfolgstatus der Anfrage. Dies ist wahr, wenn und nur wenn der <code>Statuscode</code> innerhalb des Bereichs <code>200</code> - <code>299</code> liegt.</td>
</tr>
<tr>
<td><code>Zustandscode</code></td>
<td>Zahlwort</td>
<td>Der HTTP-Antwortcode, der den Status der Antwort identifiziert.</td>
</tr>
<tr>
<td><code>Statusnachricht</code></td>
<td>Schnur</td>
<td>Die Statusnachricht, die zurückgeschickt wurde.</td>
</tr>
<tr>
<td><code>Kopfzeilen</code></td>
<td>Wörterbuch</td>
<td>Ein Wörterbuch von Headern, die in dieser Antwort festgelegt wurden.</td>
</tr>
<tr>
<td><code>Körper</code></td>
<td />
<td>Der Anforderungskörper (Inhalt) in der Antwort empfangen.</td>
</tr>
</tbody>
Namen
Fehlerfälle

RequestAsync() erzeugt einen Fehler, wenn die Antwort abläuft oder der Zielserver die Anfrage ablehnt.Wenn ein Webservice aus irgendeinem Grund heruntergefahren wird, kann dies dazu führen, dass Skripte, die diese Methode verwenden, ganz aufhören zu funktionieren.Es ist oft eine gute Idee, Anrufe an diese Methode in pcall() zu wickeln und fehlerhafte Fälle elegant zu behandeln, wenn die erforderlichen Informationen nicht verfügbar sind.

Beschränkungen

Die derzeitige Einschränkung für das Senden und Empfangen von HTTP-Anfragen beträgt 500 Anfragen pro Minute. Anfragen über diesem Schwellenwert scheitern.

Parameter

requestOptions: Dictionary

Ein Wörterbuch mit Informationen, die vom angegebenen Server abgerufen werden sollen.

Standardwert: ""

Rückgaben

Ein Wörterbuch mit Antwortinformationen vom angegebenen Server.

Code-Beispiele

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("The response was successful:", response.StatusCode, response.StatusMessage)
else
print("The response returned an error:", response.StatusCode, response.StatusMessage)
end
print("Response body:\n", response.Body)
print("Response headers:\n", HttpService:JSONEncode(response.Headers))
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("The Http request failed to send:", message)
end

Ereignisse