UE5 C++によるHTTPレスポンスヘッダーの取得と解析

HTTPリクエストクラスの拡張

Unreal Engine 5のHTTP通信機能を拡張し、レスポンスヘッダー情報を取得するカスタムクラスを作成します。以下の実装では、標準のHTTPリクエストクラスを継承し、ヘッダー情報を保持する機能を追加します。

カスタムHTTPリクエストクラスの定義

#pragma once

#include "Http.h"
#include "CoreMinimal.h"
#include "CustomHttpResponse.generated.h"

UCLASS(BlueprintType)
class YOURGAME_API UEnhancedHttpRequest : public UHttpRequest
{
    GENERATED_BODY()

public:
    virtual TSharedRef<IHttpRequest, ESPMode::ThreadSafe> CreateRequestInstance() override;
    
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "HTTP")
    TMap<FString, FString> ResponseHeaders;
};

リクエストインスタンスの生成処理

#include "CustomHttpResponse.h"

TSharedRef<IHttpRequest, ESPMode::ThreadSafe> UEnhancedHttpRequest::CreateRequestInstance()
{
    TSharedRef<IHttpRequest, ESPMode::ThreadSafe> BaseRequest = Super::CreateRequestInstance();
    
    BaseRequest->OnProcessRequestComplete().BindLambda(
        [this](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bSuccess)
        {
            if (Response.IsValid())
            {
                const TArray<FString> HeaderNames = Response->GetAllHeaders();
                for (const FString& HeaderLine : HeaderNames)
                {
                    FString Key, Value;
                    if (HeaderLine.Split(TEXT(":"), &Key, &Value))
                    {
                        ResponseHeaders.Add(Key.TrimStartAndEnd(), Value.TrimStartAndEnd());
                    }
                }
            }
        }
    );
    
    return BaseRequest;
}

HTTPリクエストの実行例

void AHttpManager::FetchRemoteData()
{
    UEnhancedHttpRequest* HttpRequest = NewObject<UEnhancedHttpRequest>();
    TSharedRef<IHttpRequest> Request = HttpRequest->CreateRequestInstance();
    
    Request->SetURL(TEXT("https://api.service.com/endpoint"));
    Request->SetVerb(TEXT("GET"));
    Request->ProcessRequest();
}

void AHttpManager::HandleResponse(UEnhancedHttpRequest* CompletedRequest)
{
    if (CompletedRequest && CompletedRequest->ResponseHeaders.Num() > 0)
    {
        for (const auto& HeaderEntry : CompletedRequest->ResponseHeaders)
        {
            UE_LOG(LogNetwork, Display, TEXT("%s: %s"), 
                *HeaderEntry.Key, 
                *HeaderEntry.Value);
        }
    }
}

応用事例

取得したヘッダー情報は、認証トークンの検証、キャッシュ制御、レート制限の監視など、さまざまなネットワーク処理に活用できます。特にREST API連携時には、サーバーからのメタデータ取得に有効です。

タグ: UnrealEngine5 C++ HTTP Networking HeaderParsing

5月13日 19:00 投稿