1

オンライン サーバーで認証しようとしていますが、ダウンロードするページを選択できません。コードは次のとおりです。

Get リクエスト:

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;

ここでポスト リクエストは、get リクエストが終了した直後に呼び出されます。

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"

その方法がわかりません。Googleで検索しても、その方法にたどり着く例しか見つかりませんでした。誰かが助けてくれたら、ありがとう。:)

4

2 に答える 2

0

次のエラー メッセージは包括的です。

"Protocol "" is unknown"

これは、使用しようとしている qtnetwork モジュールが、リクエスト URL にプロトコル (「http」、「ftp」など) を見つけられなかったことを意味します。

それは、何らかの理由でそれを送信するのを忘れているというヒントを与えるはずです. それができない場合は、未知のものを送信しています。URL 構築コードを見ると、そこからプロトコルとネットワークの場所を見落としていることがわかります。追加するのではなく、サブ URL でオーバーライドしているためです。これは私が言及している行です:

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

適切な修正は、上書きするのではなく、既存のプロトコル名とネットワークの場所を上書きすることです。これにより、次のように書くことになります。

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

=これは、包括的な名前付きメソッドを使用することで、との間のおそらく意図しないタイプミスを回避できる場合の典型的な使用例の 1 つ+=です。

于 2014-04-08T23:33:19.650 に答える