UE5 C++自定义Http节点获得Header数据

一、新建C++文件

选择All Classes,选择父类BlueprintFunctionLibrary,命名为SendHttpRequest。

添加Http支持

代理回调的参数使用DECLARE_DYNAMIC_DELEGATE_TwoParam定义,第一参数是代理类型,后面是参数1类型,参数1,参数2类型,参数2。

代理通过UPROPERTY声明

UFUNCTION的BlueprintCallable是定义一个带有流程的节点

复制代码
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "SendHttpRequest.generated.h"
DECLARE_DYNAMIC_DELEGATE_TwoParams(FHttpResponseDelegate,bool,bSuccess,const TArray<FString>&,headers);
UCLASS()
class REDSTORY_API USendHttpRequest : public UBlueprintFunctionLibrary
{
	
	GENERATED_BODY() public:
		UPROPERTY()
		FHttpResponseDelegate HttpResponseDelegate;
	
		UFUNCTION(BlueprintCallable, Category = "Custom", meta = (Keywords = "SendHttpRequest"))
		static void SendHttpRequest(FHttpResponseDelegate Callback);
	
		// void Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded);
};

// Fill out your copyright notice in the Description page of Project Settings.
#include "SendHttpRequest.h"
#include "HttpModule.h"
#include "Interfaces/IHttpResponse.h"
void USendHttpRequest::SendHttpRequest(FHttpResponseDelegate Callback)
{
	
	FHttpModule* Http = &FHttpModule::Get();
	TSharedRef<IHttpRequest,ESPMode::ThreadSafe> Request = Http->CreateRequest();
	Request->SetURL("http://127.0.0.1:8888/a");
	Request->SetVerb("POST");
	Request->SetHeader("Content-Type", "application/json");
	Request->SetHeader("User-Agent","X-UnrealEngine-Agent");
	Request->SetContentAsString("{\"a\": 1,\"b\": \"2\",\"c\": \"3\",\"d\": \"4\"}");
	// Request->OnProcessRequestComplete().BindUObject(this,&USendHttpRequest::Response);
	Request->OnProcessRequestComplete().BindLambda([Callback](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
	{
		//UE_LOG(LogTemp,Display,TEXT("Response %s"),*Response->GetHeader("Set-Cookie"));
		Callback.ExecuteIfBound(bWasSuccessful,Response->GetAllHeaders());
	});
	Request->ProcessRequest();
}

// void USendHttpRequest::Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded)
// {
//
// 	//UE_LOG(LogTemp,Display,TEXT("Response %s"),*HttpResponse->GetContentAsString());
// 	// UE_LOG(LogTemp,Display,TEXT("Response %s"),*HttpResponse->GetHeader("Set-Cookie"));
// 	// HttpResponseDelegate.Broadcast(bSucceeded);
// }

二、Blueprint

使用UE_LOG做测试还挺好用。

问题:no value will be returned by reference

数组作为代理的参数的写法

复制代码
DECLARE_DYNAMIC_DELEGATE_TwoParams(FHttpResponseDelegate,bool,bSuccess,const TArray<FString>&,headers);

问题:[Compiler] In use pin <Unnamed> no longer exists on node Send Http Request .

删除项目如下文件夹,然后鼠标右键点击uproject文件,重新生成这些文件。

相关推荐
普普通通的南瓜19 小时前
一年期免费IP证书,为公网IP地址提供HTTPS加密
网络·网络协议·tcp/ip·安全·http·金融·https
青果全球http1 天前
HTTP代理原理揭秘:如何实现高效数据中转?
网络·网络协议·http
im_AMBER1 天前
weather-app开发手记 01 HTTP请求基础 | Axios GET 请求
笔记·网络协议·学习·计算机网络·http·axios
CoderYanger1 天前
动态规划算法-子数组、子串系列(数组中连续的一段):21.乘积最大子数组
开发语言·算法·leetcode·职场和发展·动态规划·1024程序员节
CoderYanger1 天前
A.每日一题——3432. 统计元素和差值为偶数的分区方案
java·数据结构·算法·leetcode·1024程序员节
CoderYanger1 天前
动态规划算法-子数组、子串系列(数组中连续的一段):26.环绕字符串中唯一的子字符串
java·算法·leetcode·动态规划·1024程序员节
打不了嗝 ᥬ᭄1 天前
【Linux】多路转接 Select , Poll和Epoll
linux·网络·c++·网络协议·http
HIT_Weston1 天前
53、【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 单/多线程分析(五)
网络协议·http·gitlab
阿巴~阿巴~1 天前
HTTP服务器实现请求解析与响应构建:从基础架构到动态交互
服务器·网络·网络协议·http·交互·请求解析·响应构建
HIT_Weston1 天前
52、【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 单/多线程分析(四)
ubuntu·http·gitlab