Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

HTTP 요청하기

HTTP를 사용하는 이유는 무엇입니까?

`HTTP 요청 <https://developer.mozilla.org/en-US/docs/Web/HTTP>`_은 웹 서버 및 기타 Godot가 아닌 프로그램과 통신하는 데 유용합니다.

Godot의 다른 네트워킹 기능(예: 고수준 멀티플레이어)과 비교할 때, HTTP 요청은 오버헤드가 더 많고 진행하는 데 더 많은 시간이 걸리기 때문에 실시간 통신에 적합하지 않으며 멀티플레이어 게임플레이에서 일반적으로 발생하는 작은 업데이트를 많이 보내는 데 적합하지 않습니다.

그러나 HTTP는 외부 웹 리소스와의 상호 운용성을 제공하며 예를 들어 게임 자산과 같은 파일을 전송하기 위해 대량의 데이터를 보내고 받는 데 탁월합니다. 그런 다음 :ref:`런타임 파일 로드 및 저장 <doc_runtime_loading_and_saving>`을 사용하여 이러한 자산을 로드할 수 있습니다.

따라서 HTTP는 게임의 로그인 시스템, 로비 브라우저, 웹에서 일부 정보를 검색하거나 게임 자산을 다운로드하는 데 유용할 수 있습니다.

Godot에서의 키프레임

HTTPRequest 노드는 Godot에서 HTTP 요청을 만드는 가장 쉬운 방법입니다. 이는 더 낮은 수준의 :ref:`HTTPClient <class_HTTPClient>`에 의해 지원되며 이에 대한 튜토리얼은 :ref:`here <doc_http_client_class>`에서 사용할 수 있습니다.

이 예에서는 최신 Godot 릴리스의 이름을 검색하기 위해 GitHub에 HTTP 요청을 할 것입니다.

경고

Android**로 내보낼 때 프로젝트를 내보내거나 원클릭 배포를 사용하기 전에 Android 내보내기 사전 설정에서 **인터넷 권한을 활성화해야 합니다. 그렇지 않으면 모든 종류의 네트워크 통신이 Android OS에 의해 차단됩니다.

씬 테스트하기

만들기 새 빈 씬, 루트 노드 노드를 하위 항목으로 추가합니다.

../../_images/rest_api_scene.webp

프로젝트 설정하기

프로젝트가 시작되면(_ready()``에서) :ref:`HTTPRequest <class_HTTPRequest>` 노드를 사용하여 Github에 HTTP 요청을 보내고 요청이 완료되면 반환된 JSON 데이터를 구문 분석하고 ``name 필드를 찾아 콘솔에 인쇄합니다.

extends Node

func _ready():
    $HTTPRequest.request_completed.connect(_on_request_completed)
    $HTTPRequest.request("https://api.github.com/repos/godotengine/godot/releases/latest")

func _on_request_completed(result, response_code, headers, body):
    var json = JSON.parse_string(body.get_string_from_utf8())
    print(json["name"])

스크립트 및 씬을 저장하고 프로젝트를 실행합니다. Github의 최신 Godot 릴리스 이름이 출력 로그에 인쇄되어야 합니다. JSON 구문 분석에 대한 자세한 내용은 :ref:`JSON <class_JSON>`에 대한 클래스 참조를 참조하세요.

``result``가 ``RESULT_SUCCESS``와 같은지, JSON 구문 분석 오류가 발생했는지 확인하고 싶을 수 있습니다. 자세한 내용은 JSON 클래스 참조 및 :ref:`HTTPRequest <class_HTTPRequest>`를 참조하세요.

다른 요청을 보내기 전에 요청이 완료될 때까지 기다려야 합니다. 한 번에 여러 개를 요청하려면 요청당 하나의 노드가 필요합니다. 일반적인 전략은 필요에 따라 런타임에 HTTPRequest 노드를 생성하고 삭제하는 것입니다.

Godot 서버 만들기

지금까지 우리는 서버에서 데이터를 요청하는 것으로 제한했습니다. 하지만 서버에 데이터를 보내야 한다면 어떻게 될까요? 이를 수행하는 일반적인 방법은 다음과 같습니다.

var json = JSON.stringify(data_to_send)
var headers = ["Content-Type: application/json"]
$HTTPRequest.request(url, headers, HTTPClient.METHOD_POST, json)

커스텀 HTTP 헤더 설정하기

물론 사용자 정의 HTTP 헤더를 설정할 수도 있습니다. 이는 문자열 배열로 제공되며 각 문자열에는 "header: value" 형식의 헤더가 포함되어 있습니다. 예를 들어 사용자 지정 사용자 에이전트(HTTP User-Agent 헤더)를 설정하려면 다음을 사용할 수 있습니다.

$HTTPRequest.request("https://api.github.com/repos/godotengine/godot/releases/latest", ["User-Agent: YourCustomUserAgent"])

위험

누군가가 출시된 애플리케이션을 분석하고 디컴파일하여 토큰, 사용자 이름 또는 비밀번호와 같은 내장된 인증 정보에 액세스할 수 있다는 점에 유의하세요. 즉, 일반적으로 게임 내에 데이터베이스 액세스 자격 증명과 같은 항목을 삽입하는 것은 좋은 생각이 아닙니다. 가능하면 공격자에게 유용한 정보를 제공하지 마십시오.