
UE5 C++ 使用HTTP请求模块从虚幻引擎发送HTTP异步请求
要使用 Unreal Engine Http 模块,我们需要编辑 Build.cs 文件以将该模块作为依赖项包含在内。
新建C++类,选择 父类 UBlueprintAsyncActionBase
这个是异步操作蓝图类,你选不选都无所谓,这个是可以暴露给蓝图用的,如果蓝图使用它会是异步的函数,前提是暴露给蓝图了,假设我文件名是 XXXAsyncActionBase
public class 模块名 : ModuleRules
{
public DebrisCloud(ReadOnlyTargetRules Target) : base(Target)
{
// ...
PrivateDependencyModuleNames.Add("HTTP");
如果是插件,也可以添加Json模块
PublicDependencyModuleNames.AddRange(
new string[]
{
"Json","HTTP"
}
);
在你的XXXAsyncActionBase.cpp 添加引用,
#include "HttpModule.h"
#include "Interfaces/IHttpRequest.h"
#include "Interfaces/IHttpResponse.h"
在你的XXXAsyncActionBase.h文件里声明请求方法
//委托,如果想异步执行方法,必须需要委托 这里我们只一个参数,所以是OneParam
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FDResponsDeleget,FString,Data);
/**
*
*/
UCLASS()
class DOUYINGTOOLS_API UXXXAsyncActionBase : public UBlueprintAsyncActionBase
{
GENERATED_BODY()
public:
//设置临时的参数
UPROPERTY()
FString TempUrl;
UPROPERTY()
FString TempData;
//声明委托
//执行成功的执行线委托
UPROPERTY(BlueprintAssignable)
FDResponsDeleget OnReqSuccess;
//执行失败的执行线委托
UPROPERTY(BlueprintAssignable)
FDResponsDeleget OnReqFail;
/**
*暴露给蓝图 要添加宏 比如 UFUNCTION(BlueprintPure) 而且方法必须有static修饰
*DisplayName 在蓝图里这个节点会显示成这个
*Wordkeys 关键词
*异步工具 是属于什么分类
*/
UFUNCTION(BlueprintCallable, meta = (DisplayName = "发起Http请求", Wordkeys = "http"), Category= "异步工具")
static UXXXAsyncActionBase* HttpReq(FString Url,Fstring Data);
virtual void Activate() override;
然后转到XXXAsyncActionBase.cpp实现该函数
UXXXAsyncActionBase* UXXXAsyncActionBase :: HttpReq(FString Url,Fstring Data)
{
UXXXAsyncActionBase* NewAab = NewObject<UXXXAsyncActionBase>();
NewAab->TempUrl = Url;
NewAab->TempData = Data;
return NewAab;
}
接着实现 Activate
void UValidationAsyncActionBase::Activate()
{
//先将委托变量赋值,后续使用
const FDResponsDeleget TempOnReqSuccess = OnReqSuccess;
const FDResponsDeleget TempOnReqFail = OnReqFail;
//创建http模块
FHttpModule& httpModule = FHttpModule::Get();
//创建http请求
TSharedRef<IHttpRequest, ESPMode::ThreadSafe> HttpReq = httpModule.CreateRequest();
//设置请求方式
HttpReq->SetVerb(TEXT("POST"));
//设置数据类型
HttpReq->SetHeader(TEXT("Content-Type"), TEXT("application/x-www-form-urlencoded"));
//设置数据
FString ReqData = "data="+TempData;
HttpReq->SetContentAsString(ReqData);
//设置请求地址
HttpReq->SetURL(TempUrl);
//设置回调,它将在HTTP调用完成时执行
HttpReq->OnProcessRequestComplete().BindLambda(
//把上面的委托放这,以便使用
[TempOnReqSuccess,TempOnReqFail](
FHttpRequestPtr pRequest,
FHttpResponsePtr pResponse,
bool connectedSuccessfully) mutable {
if (connectedSuccessfully) {
// 获取请求的数据内容
FString RepData = pResponse->GetContentAsString();
....//做你想做的
//返回数据
TempOnReqSuccess.Broadcast(RepData);
}
else {
switch (pRequest->GetStatus()) {
case EHttpRequestStatus::Failed_ConnectionError:
UE_LOG(LogTemp, Error, TEXT("连接失败."));
TempOnReqFail.Broadcast("返回错误信息");
default:
UE_LOG(LogTemp, Error, TEXT("请求失败."));
TempOnReqFail.Broadcast("返回错误信息");
}
}
});
//提交HTTP请求
HttpReq->ProcessRequest();
}
编译无误打开个蓝图,右键搜索 发起Http请求 会显示 一个异步蓝图
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 七龙
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果