发出HTTP请求时,GameMaker运行器崩溃

时间:2016-04-21 19:11:33

标签: json game-maker

我最近又回到了使用GameMaker:Studio,自从我上次使用它以来,有很多大量的更新!事实上,我最后一次使用它时只有Windows和HTML5作为导出选项...

无论如何,渴望尝试一些新的东西,我决定尝试使用本机HTTP功能,因为它们看起来非常有前景。

我使用http_post_string()进行了测试,效果很好,将JSON字符串发送到我的服务器并获取JSON字符串。返回的字符串实际上表示一个具有单个属性"echo"的对象,该属性包含已发出的HTTP请求,只是为了查看GM:S正在发送的内容。

我不喜欢它发送Content-Type: application/x-www-form-urlencoded时非常清楚JSON,我希望能够设置我自己的用户代理字符串,以便服务器可以知道哪个游戏正在与之通话而不必传递一个额外的参数。

所以我使用低级http_request()函数重新创建了相同的请求。一切都很好,所以我测试了它。

它崩溃了。比如,没有错误消息或任何东西,只是一个完全崩溃,Windows必须强制关闭它。

所以在这里我使用的代码是所有权利都可以正常工作,但在运行时崩溃......

///send_request(file,ds_map_data,callback_event_id)
var request = ds_map_create();
request[? "instance"] = id;
request[? "event"] = argument2;

if( !instance_exists(obj_ajax_callback)) {
    instance_create(0,0,obj_ajax_callback);
}

var payload = json_encode(argument1);
var headers = ds_map_create();
headers[? "Content-Length"] = string_length(payload);
headers[? "Content-Type"] = "application/json";
headers[? "User-Agent"] = obj_ajax_callback.uastring;

var xhr = http_request("https://example.com/"+argument0,"POST",headers,payload);

with(obj_ajax_callback) {
    active_callbacks[? xhr] = request;
}

ds_map_destroy(headers);

obj_ajax_callback是一个维护ds_map个活动请求的对象,在其HTTP事件中,它会侦听这些请求的回调并对with(request[? "instance"]) event_user(request[? "event"])行做出反应,以便调用对象可以处理响应。这与完全正常的http_post_string()尝试没有变化。

知道可能导致此次崩溃的原因是什么?

1 个答案:

答案 0 :(得分:1)

这种崩溃的原因是因为您将Content-Length标头作为真实而不是字符串发送。如果您将行更改为

headers[? "Content-Length"] = string(string_length(payload));

它应该有用。