私はQNetworkReplyを使用してルータインターフェイスに簡単なGET要求を発行しています。基本的に、投稿データが空の場合はGETを発行します。それ以外の場合はPOSTを発行します。のは、私はUIの答えを示してQNetworkReplyの動作は、ローカルサイトの認証で
...
connect(nam,
SIGNAL(finished(QNetworkReply*)),
this,
SLOT(finished(QNetworkReply*)));
...
void HttppostWindow::finished(QNetworkReply *reply)
{
if(reply->error() == QNetworkReply::NoError)
{
ui->textEdit_result->setText(QObject::tr(reply->readAll()));
}
else
{
ui->textEdit_result->setPlainText(reply->errorString());
}
}
で
QString url=ui->lineEdit_url->text();
QString paras=ui->pTextEdit_paras->toPlainText();
qDebug()<< "paras" << paras;
QByteArray post_data;
post_data.append(paras);
QNetworkRequest request = QNetworkRequest(QUrl(url));
request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
if(post_data.isEmpty())
{
//nam->head(request);
nam->get(request);
}
else
{
nam->post(request,post_data);
}
今GETに固執してみましょう。 今、ローカルインタフェースはログインとpwを要求します。問題は、GETコマンドを使用して取得したテキストが、ユーザーが間違ったパスワードを入力した場合に表示されるテキストであることです(認証が失敗しました。もう一度やり直してください)。 さらに、コードnam-> head(request)でヘッダを取得できるはずですが、replyAllの内容は空です。
アイデア?
あなたのリクエストにルータのユーザ名/パスワードを送信していますか?ルータでHTTP基本認証が使用されている場合は、[この回答](https://stackoverflow.com/a/1700751/2666212)を参照してください。 – Mike
@Mikeコードでは、paras変数が空の場合は何も送信しないことがはっきりとわかります。私が言ったように、それはちょうどGET要求です – user217354
それが何であれ、あなたはルータに自分自身を認証する必要があります。私の前のコメントにリンクされた答えに指定されたヘッダーを送ろうとしてください。 – Mike