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


    一、新建C++文件

     

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

    添加Http支持

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

    代理通过UPROPERTY声明

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

    1. // Fill out your copyright notice in the Description page of Project Settings.
    2. #pragma once
    3. #include "CoreMinimal.h"
    4. #include "Kismet/BlueprintFunctionLibrary.h"
    5. #include "SendHttpRequest.generated.h"
    6. DECLARE_DYNAMIC_DELEGATE_TwoParams(FHttpResponseDelegate,bool,bSuccess,const TArray&,headers);
    7. UCLASS()
    8. class REDSTORY_API USendHttpRequest : public UBlueprintFunctionLibrary
    9. {
    10. GENERATED_BODY() public:
    11. UPROPERTY()
    12. FHttpResponseDelegate HttpResponseDelegate;
    13. UFUNCTION(BlueprintCallable, Category = "Custom", meta = (Keywords = "SendHttpRequest"))
    14. static void SendHttpRequest(FHttpResponseDelegate Callback);
    15. // void Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded);
    16. };
    1. // Fill out your copyright notice in the Description page of Project Settings.
    2. #include "SendHttpRequest.h"
    3. #include "HttpModule.h"
    4. #include "Interfaces/IHttpResponse.h"
    5. void USendHttpRequest::SendHttpRequest(FHttpResponseDelegate Callback)
    6. {
    7. FHttpModule* Http = &FHttpModule::Get();
    8. TSharedRef<IHttpRequest,ESPMode::ThreadSafe> Request = Http->CreateRequest();
    9. Request->SetURL("http://127.0.0.1:8888/a");
    10. Request->SetVerb("POST");
    11. Request->SetHeader("Content-Type", "application/json");
    12. Request->SetHeader("User-Agent","X-UnrealEngine-Agent");
    13. Request->SetContentAsString("{\"a\": 1,\"b\": \"2\",\"c\": \"3\",\"d\": \"4\"}");
    14. // Request->OnProcessRequestComplete().BindUObject(this,&USendHttpRequest::Response);
    15. Request->OnProcessRequestComplete().BindLambda([Callback](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
    16. {
    17. //UE_LOG(LogTemp,Display,TEXT("Response %s"),*Response->GetHeader("Set-Cookie"));
    18. Callback.ExecuteIfBound(bWasSuccessful,Response->GetAllHeaders());
    19. });
    20. Request->ProcessRequest();
    21. }
    22. // void USendHttpRequest::Response(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded)
    23. // {
    24. //
    25. // //UE_LOG(LogTemp,Display,TEXT("Response %s"),*HttpResponse->GetContentAsString());
    26. // // UE_LOG(LogTemp,Display,TEXT("Response %s"),*HttpResponse->GetHeader("Set-Cookie"));
    27. // // HttpResponseDelegate.Broadcast(bSucceeded);
    28. // }

    二、Blueprint

    使用UE_LOG做测试还挺好用。

    问题:no value will be returned by reference

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

    DECLARE_DYNAMIC_DELEGATE_TwoParams(FHttpResponseDelegate,bool,bSuccess,const TArray&,headers);

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

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

  • 相关阅读:
    2022年全球市场船用钢板总体规模、主要生产商、主要地区、产品和应用细分研究报告
    委托及观察者模式
    利用决策树找出最优特征组合
    ELK 日志收集
    P1091 [NOIP2004 提高组] 合唱队形
    win下搭建php环境的方法
    D. Monocarp and the Set-Educational Codeforces Round 156 (Rated for Div. 2)
    RocketMQ学习(3) 秒杀实战
    C++中模板类对象创建
    正则表达式的应用(前端写法)
  • 原文地址:https://blog.csdn.net/zhuziying99/article/details/134006484