IHttp请求响应长度限制
IHttpRequest response length limit
我有一个正在设置的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 循环中用了那个代码,但它似乎没有区别。偶尔,代码会中断,因为当我尝试以字符串形式访问内容时,响应为 null。
有人知道如何正确检查它是否为空吗?
<小时 />编辑:
根据@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 "";
但是,这会导致无限循环。
我认为响应没有这么小的限制。看起来更像是在响应实际处理请求之前获取响应。您应该仅在 GetStatus() 重新调整 Processing() 以外的内容后尝试调用 GetResponse()。
在空指针检查上:FHttpResponsePtr 只不过是一个 TSharedPtr。与任何 TSharedPtr 一样,您可以在指针本身上使用 IsValid()。例如,使用上面的代码:
FHttpResponsePtr response = HttpRequest->GetResponse();
if (response != nullptr) { // wrong, the pointer itself is never null!
if (response.IsValid()) { // correct, check for pointer validity
if (response.Get() != nullptr) { // basically the same, but longer
编辑:
很抱歉误会。你绝不能用这样的while循环来阻塞游戏循环。所以你有两种可能性:
- 您可以从 while 循环中执行检查,但在 actor 的 tick 事件期间只执行一次。
- 您等待回调委托触发。
下面是使用委托的工作代码示例:
void AYourActor::NetworkTest()
{
TSharedRef<IHttpRequest> HttpRequest = FHttpModule::Get().CreateRequest();
HttpRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json"));
HttpRequest->SetURL("http://www.google.com");
HttpRequest->SetVerb(TEXT("GET"));
HttpRequest->OnProcessRequestComplete().BindUObject(this, &AYourActor::OnResponseReceived);
HttpRequest->ProcessRequest();
}
void AYourActor::OnResponseReceived(FHttpRequestPtr request, FHttpResponsePtr response, bool didConnect)
{
UE_LOG(LogExec, Warning, TEXT("Response received %d!"), didConnect);
UE_LOG(LogExec, Warning, TEXT("Response: %s"), *(response->GetContentAsString()));
}
相关文章:
- std::array的长度有大小限制吗?
- 如何对字符串::getline进行长度限制
- QNetworkReply 响应是否有数据限制
- 打印时限制 QStringList 的长度
- int限制与长度限制
- IHttp请求响应长度限制
- 限制集合中的字符串长度
- 如何在没有长度限制的情况下在c++中获得格式化的std::字符串
- 将 natvis 文件中字符* 的显示限制为特定长度
- 做助推::那么未来的长度有任何限制
- 源行长度限制
- 将浮点流打印限制为一定长度
- 将响应限制为每行十个五边形数
- Q设置:.ini文件的行长度有限制吗
- 将字符串长度限制在特定范围内
- 字符数组的长度限制
- 带有输出长度限制和特殊参数的c++排列
- 编译期间MSVC中的字符串长度限制
- Oracle的C++Qt SQL查询长度限制
- C++是否有最大数组长度限制