Как отправить http-запрос из приложения на Qt 5.15.2 WebAssembly (Emscripen) с помощью QNetworkAccessManager?
Нижеследующий код идеально выполняется в десктопном приложении, но возвращает ошибку QNetworkReply::ContentNotFoundError(=203) при обращении по любому адресу с протоколом http. С чего бы это? Как заставить работать?
void SignUpWidget::on_ackButton_clicked()
{
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
//TODO: from settings
QUrl url(QString("http://localhost:80/"));
QNetworkRequest request(url);
//application/json
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
QUrlQuery params;
connect(manager, &QNetworkAccessManager::finished, [](QNetworkReply *reply) {
auto data = reply->readAll();
// reply->header()
QMessageBox *msgBox = new QMessageBox;
msgBox->setText(reply->request().url().toString() + "-" + QString::number(reply->error()) + "-" + data);
msgBox->setWindowTitle("Reply1");
msgBox->show();
});
manager->post(request, params.toString(QUrl::FullyEncoded).toUtf8());
}
reply->request().url().toString() и reply->readAll() возвращают пустую строку
Kit: Qt 5.15.2 WebAssembly (Emscripen)
Вроди бы пишут:
Network access: the web sandbox limits network access to a subset of what is available for native apps.
то есть, если я правильно понял, должны быть те же ограничения для доступа к сети, что и у десктопного приложения (?), тогда почему десктопное работает, а веб-ассемблерное нет? Или речь идет об ограничениях браузера? Ну и в этом случае в javascript ведь можно сделать http-запрос...
PS С методом GET та же история
Ответы (1 шт):
Смысл взятой из документации фразы
Network access: the web sandbox limits network access to a subset of what is available for native apps.
в том, что для WebAssembly доступна только часть функционала нативных приложений.
И далее идут разъяснения, в частности для QNetworkAccessManager
QNetworkAccessManager http requests to the web page origin server, or to a server which supports CORS.
т.е. стандартные ограничения политики CORS.