我有一个我正在设置的 HTTP 游戏服务器,我有一个函数可以返回很多关于地图的信息。来自服务器的输出大约有 7800 个字符,但是当我在游戏中获取 URL 的内容时,游戏只得到了 1124 个字符。
IHttpRequest 的响应内容的长度是否有限制?
相关代码:
FString ANetwork::getContentsOfURL(FString URL, TArray<FString> keys, TArray<FString> values)
{
serverResponse = NULL;
TSharedRef<IHttpRequest> HttpRequest = FHttpModule::Get().CreateRequest();
HttpRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json"));
int32 count = keys.Num();
URL += "?auth=" + authenticator;
for (int i = 0; i < count; i++)
{
URL += "&" + keys[i] + "=" + values[i];
}
HttpRequest->SetURL(URL);
HttpRequest->SetVerb(TEXT("GET"));
HttpRequest->OnProcessRequestComplete().BindUObject(this, &ANetwork::OnResponseReceived);
HttpRequest->ProcessRequest();
bool wait = true;
while (wait)
{
FHttpResponsePtr response = HttpRequest->GetResponse();
FHttpResponsePtr httpnull;
if (response != httpnull)
{
if (HttpRequest->GetResponse()->GetContentAsString() != "")
{
return HttpRequest->GetResponse()->GetContentAsString();
}
}
}
return "";
}
在旁注中,我不确定如何检查 an 是否FHttpResponsePtr
指向空对象。我以为我在 while 循环中使用了该代码,但似乎没有什么不同。偶尔,代码会中断,因为当我尝试以字符串形式访问内容时响应为空。
任何人都知道如何正确检查它是否为空?
编辑:
根据@TheBrain 的回答,这是我修改后的循环:
bool wait = true;
while (wait)
{
if (HttpRequest->GetStatus() != EHttpRequestStatus::Processing)
{
FHttpResponsePtr response = HttpRequest->GetResponse();
if (response.IsValid())
{
return response->GetContentAsString();
}
else
return "INVALID";
}
}
return "";
但是,这会导致无限循环。