• 使用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();

  • 相关阅读:
    Linux内核驱动开发的步骤
    cpacr_el1等特殊寄存器
    PyQt5之消息对话框
    14:00面试,14:06就出来了,问的问题有点变态。。。
    离散傅里叶变换(DFT)
    记住这份软件测试八股文还怕不能拿offer?你值得拥有
    NodeJS原生后台开发教程
    累计概率分布、概率分布函数(概率质量函数、概率密度函数)、度量空间、负采样(Negative Sampling)
    maven 项目添加 git-hook 脚本,约束提交内容格式
    Python得到字符的阿斯克码值 chr ord
  • 原文地址:https://blog.csdn.net/FYZDMMCpp/article/details/133390226