Ich verwende QNetworkReply, um eine einfache GET-Anfrage an meine Router-Schnittstelle auszugeben. Grundsätzlich, wenn die Postdaten leer sind, erstelle ich ein GET, sonst werde ich einen POST ausgeben. Bleiben wir mit dem GETQNetworkReply Verhalten gegen lokale Site mit Authentifizierung
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);
}
jetzt mit
...
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());
}
}
zeige ich die Antwort in der ui. Im Moment fragt die lokale Schnittstelle nach einem Login und einem Passwort. Das Problem besteht darin, dass der abgerufene Text mit dem Befehl GET derjenige ist, den die Schnittstelle anzeigen würde, wenn der Benutzer ein falsches Kennwort eingegeben hätte (Authentisierung fehlgeschlagen, bitte versuchen Sie es erneut usw.). Außerdem sollte ich mit dem Code nam-> head (request) den Header abrufen können, aber der Inhalt von replyAll ist leer.
Irgendwelche Ideen?
Senden Sie den Benutzernamen/das Passwort des Routers in Ihrer Anfrage? Wenn Ihr Router die HTTP-Standardauthentifizierung verwendet, lesen Sie [diese Antwort] (https://Stackoverflow.com/a/1700751/2666212), um Informationen dazu zu erhalten. – Mike
@Mike Nun, im Code ist deutlich sichtbar, dass ich nichts sende, wenn die Variable paras leer ist. Wie ich sagte, es ist nur eine GET-Anfrage – user217354
Was auch immer Anfrage ist, müssen Sie sich an den Router authentifizieren. Versuchen Sie, den Header zu senden, der in der Antwort angegeben wurde, die in meinem vorherigen Kommentar verlinkt ist. – Mike