【发布时间】:2015-04-14 05:47:15
【问题描述】:
我正在设置一个 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 "";
}
附带说明,我不确定如何检查 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 "";
然而,这会导致无限循环。
【问题讨论】:
标签: c++ http unreal-engine4