1

我正在尝试在在线服务器中进行身份验证,但我无法选择要下载的页面,这是我的代码:

获取请求:

QObject::connect(&access, SIGNAL(finished(QNetworkReply*)), &loop_get, SLOT(quit()));

url_str = QString("http://") + info + QString(".server.com");
server_url = QString("t") + info + QString("-") + info + QString(".server.com");

request.setUrl(QUrl(url_str));

reply = access.get(request);
loop_get.exec();

if(reply->error() != QNetworkReply::NoError)
{
    throw std::runtime_error(reply->errorString().toStdString());
}

delete reply;

这里是发布请求,在获取请求完成后立即调用:

QObject::connect(&access, SIGNAL(finished(QNetworkReply*)), &loop_post, SLOT(quit()));

url_str = "/page_wanted?parameters=5&t=3";

//Assembly the message budy
msg_body = QString("message");

//assembly HTTP header
request.setUrl(QUrl(url_str));
request.setHeader(QNetworkRequest::ServerHeader, server_url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlenconded");
request.setHeader(QNetworkRequest::ContentLengthHeader, QString::number(message.size()));

reply = access.post(request, QByteArray(message.toStdString().c_str()));

loop_post.exec();

if(reply->error() == QNetworkReply::NoError)
{
    qDebug() <<"that's ok:\n"<<reply->readAll();
}
else
{
    qDebug() <<"That's not ok:\n"<<reply->errorString();
}

delete reply;

返回的错误是:

That's not ok:
"Protocol "" is unknown"

我不知道该怎么做,在谷歌上搜索我只找到了带我去那种方式的例子,所以如果有人可以帮助我会感谢你。:)

4

2 回答 2

0

线

url_str = "/page_wanted?parameters=5&t=3";

缺少一个加号:D 试试

url_str += "/page_wanted?parameters=5&t=3";

你应该好好去...

于 2014-04-08T22:18:33.083 回答
0

以下错误消息应该是全面的:

"Protocol "" is unknown"

这意味着您尝试使用的 qtnetwork 模块在请求 URL 中没有找到协议,即“http”、“ftp”等。

这应该暗示您出于某种原因忘记发送它。否则,您发送了一个未知数。如果您查看您的 URL 构造代码,您会发现您错过了那里的协议和网络位置,因为您使用 suburl 而不是附加来覆盖它。这是我所指的行:

url_str = "/page_wanted?parameters=5&t=3";

正确的解决方法是覆盖现有的协议名称和网络位置,而不是覆盖。因此,您将编写如下内容:

url_str.append("/page_wanted?parameters=5&t=3");

这是一个典型的用例,使用全面的命名方法可以避免=和之间可能无意的拼写错误+=

于 2014-04-08T23:33:19.650 回答