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連携時には、サーバーからのメタデータ取得に有効です。