Я нашел способ сделать это.
Сначала я попытался wait()
на http_response
, но исполнение там было с помехами.Когда я решил прочитать ответ char
по char
, я увидел, что не только я получал полный ответ, но что этот ответ никогда не заканчивался и не вызывал -1
до Рагнарока.
Моя гипотезав том, что серверы Wiki поддерживают соединение в том случае, если они хотят транслировать событие в браузер, и фактически, глядя на источник страницы, вы можете найти этот бит кода:
var messaging = vAPI.messaging;
...
messaging.Connection.pagehide = function() {
for ( var connection of this.connections.values() ) {
connection.disconnect();
connection.handler(connection.toDetails('connectionBroken'));
}
}.bind(messaging);
window.addEventListener('pagehide', messaging.Connection.pagehide);
, который полностьювыглядит как то, что будет держать соединение GET-запроса открытым:)
Вот код, который я использовал, чтобы получить HTML страницы в конце.Я просто читаю это понемногу, пока не получу -1
, пока это делает свое дело.Если вы играете с этим, помните об ограничении скорости этих серверов.Счастливого соскоба!
#include "cpprest/http_client.h"
#include <string>
using namespace std;
using namespace utility;
using namespace web::http;
using namespace web::http::client;
void main()
{
http_client wHttpClient(U("https://en.wikipedia.org"));
http_request wRequest(methods::GET);
wRequest.set_request_uri(U("w/index.php?title=Barbecue&action=history"));
http_response wResponse = wHttpClient.request(wRequest).get();
long l;
string str;
while (true)
{
l = wResponse.body().read().get();
if (l == -1) { break; }
str += static_cast<char>(l);
}
cout << str;
}