赞
踩
UE4中的HTTP模块封装了libcurl的HTTP功能,很容易实现HTTP下载和上传功能,代码如下
- class FHttpRequestTest
- {
- void Download(const FString& URL)
- {
- TSharedRef HttpReuest = FHttpModule::Get().CreateRequest();
- HttpReuest->SetURL(URL);
- HttpReuest->SetVerb(TEXT("GET"));
- HttpReuest->SetHeader(TEXT("Content-Type"), TEXT("application/x-www-form-urlencoded"));
- HttpReuest->OnProcessRequestComplete().BindRaw(this, &FHttpRequestTest::OnRequestComplete);
- HttpReuest->OnRequestProgress().BindRaw(this, &FHttpRequestTest::OnRequestProgress);
- HttpReuest->ProcessRequest();
- }
- void Upload(const FString& URL, const FString& ContentString)//ContentString为需要上传的文件内容,如果不是纯文本就换成TArray类型的参数
- {
- TSharedRef HttpReuest = FHttpModule::Get().CreateRequest();
- HttpReuest->SetURL(URL);
- HttpReuest->SetVerb(TEXT("POST"));
- HttpReuest->SetHeader(TEXT("Content-Type"), TEXT("application/x-www-form-urlencoded"));
- HttpReuest->SetContentAsString(ContentString);//也可以用SetContent,只不过参数要换成TArray
- HttpReuest->OnProcessRequestComplete().BindRaw(this, &FHttpRequestTest::OnRequestComplete);
- HttpReuest->OnRequestProgress().BindRaw(this, &FHttpRequestTest::OnRequestProgress);
- HttpReuest->ProcessRequest();
- }
- //请求完成
- void OnRequestComplete(FHttpRequestPtr HttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded)
- {
- if (!HttpRequest.IsValid() || !HttpResponse.IsValid())
- {
- return;
- }
- else if (bSucceeded && EHttpResponseCodes::IsOk(HttpResponse->GetResponseCode()))
- {
- //如果是下载请求,可通过这段代码将文件保存
- FString Filename = FPaths::GetCleanFilename(HttpRequest->GetURL());
- FFileHelper::SaveArrayToFile(HttpResponse->GetContent(), *FString::Printf(TEXT("%s%s"), *FPaths::GameSavedDir(), *Filename));
- }
- }
- //请求进度
- void OnRequestProgress(FHttpRequestPtr HttpRequest, int32 BytesSent, int32 BytesReceived)
- {
- }
- };
普通的HTTP请求,GET方式与下载功能一样,POST方式与上传功能一样,在下载功能中,如果不知道下载文件的大小,可通过HttpReuest->SetVerb(TEXT("HEAD"));只请求头的方式获取文件大小,文件大小在头的Content-Length字段中
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。