• 使用UE4 HttpRequest提交多表单


    大部分HTTP库都是支持直接设置多表单字段的,但UE4的HttpRequest比较惨,只能用SetContent设置整个的TArray作为请求体,所以想要传多表单就要自己拼。

    首先设置Header,Content-Type设置为多表单,并设置boundary:

    1. auto HttpRequest = FHttpModule::Get().CreateRequest();
    2. HttpRequest->SetHeader("Content-Type", TEXT("multipart/form-data; boundary=yourboundary"));
    3. HttpRequest->SetURL(yourUrl);
    4. HttpRequest->SetVerb("POST");

    boundary想设什么都行,但要和后面用的统一。

    然后拼请求体的数据字段部分:

    1. FString RequestBody;
    2. FString Boundary = TEXT("--yourboundary\r\nContent-Disposition: form-data; name=");
    3. //拼入单个属性
    4. FString Field = Boundary + TEXT("\"") + Key + TEXT("\"\r\n\r\n") + Value + TEXT("\r\n");
    5. RequestBody += Field;

    这里需要注意,分隔两个属性的boundary行要比Header里设置的boundary前面多两个横杠

    然后拼入文件:

    1. RequestBody += TEXT("--yourboundary\r\nContent-Disposition: form-data; name=\"file\"; "); //分隔行和前缀
    2. RequestBody += TEXT("filename=\"") + FileName + TEXT("\"\r\n\r\n"); //文件名
    3. //开始拼文件,我要传的是文本文件,所以都转成字符串
    4. Buffer.Add(0); //结尾拼/0
    5. const char* BufferData = (const char*)Buffer.GetData();
    6. RequestBody += ANSI_TO_TCHAR(BufferData); //文件内容拼接到RequestBody
    7. RequestBody += TEXT("\r\n--yourboundary--\r\n"); //结尾分隔行

    拼文件这步需要注意:由于我传的是文本文件,最后也是用SetContentAsString设置请求体,所以可以把Buffer转成字符串。但如果传的是二进制文件,那Buffer中间可能就有0,这样转成char*时就无法分辨结尾了。这种情况请求体也要直接用TArray<uint8>,然后使用SetContent设置,而不能用FString。

    另外,分隔行最后要有两个横杠,注意不要打错。

    然后把请求体设置进去,就可以传了:

    1. HttpRequest->SetContentAsString(RequestBody);
    2. HttpRequest->OnProcessRequestComplete().BindLambda([](FHttpRequestPtr Request, FHttpResponsePtr Response, bool bSuccess)
    3. {
    4. if (Response.IsValid())
    5. {
    6. FString ResponseStr = Response->GetContentAsString();
    7. UE_LOG(LogTemp, Warning, TEXT("Upload Response: %s"), *ResponseStr);
    8. }
    9. else
    10. {
    11. UE_LOG(LogTemp, Error, TEXT("Upload failed"));
    12. }
    13. });
    14. HttpRequest->ProcessRequest();

  • 相关阅读:
    ISIS默认层级实验简述
    微信小程序之项目基本结构、页面的基础及宿主环境
    Oracle常用数值型函数
    改进的PSO-BP算法在工业机器人末端位姿误差补偿中的应用
    scratch五彩糖葫芦 电子学会图形化编程scratch等级考试三级真题和答案解析2022年6月
    ROS学习笔记03、ROS通信机制(话题通信、服务通信、参数服务器)
    python 注解, 装饰器@ 详解
    整理MongoDB文档:身份验证
    做强礼品经济韧性与活力,金秋10月第30届深圳礼品展来袭!
    MapStruct
  • 原文地址:https://blog.csdn.net/FYZDMMCpp/article/details/133390226