私のqhttp get()呼び出しはWindowsでは動作しませんが、Linuxでは動作します
質問
qhttpを使用してWebページを取得するプログラムを作成しました。これはLinuxでは正常に機能しますが、Windowsボックス(Vista)では機能しません。 qhttp doneシグナルは受信されないようです。
関連するコードは次のとおりです。
Window::Window()
{
http = new QHttp(this);
connect(http, SIGNAL(done(bool)), this, SLOT(httpDone(bool)));
url = new QUrl("http://something.com/status.xml");
http->setHost(url->host(), url->port() != -1 ? url->port() : 80);
if (!url->userName().isEmpty()) http->setUser(url->userName(), url->password());
}
void Window::retrievePage()
{
byteArray = new QByteArray;
result = new QBuffer(byteArray);
result->open(QIODevice::WriteOnly);
httpRequestAborted = false;
httpGetId = http->get(url->path(), result);
}
void Window::httpDone(bool error)
{
//Never gets here!
}
ヘルプが必要な場合。
マット
解決
これはまったく発生しないはずです。つまり、QHttpはWindowsとUnixの両方で確実に動作します。
私のアドバイスは、サーブが適切に応答するかどうかを確認することです。これは、例えば、行うことができますデータ転送に問題がないことを確認します。 QHttpのシグナルからステータスをトレースできます。 dataReadProgress 、 requestStarted 、 requestFinished 、およびその他の関連シグナル。
一方で、古いQHttpを使用する代わりに、推奨される QNetworkAccessManager を使用しない理由代わりに?すぐに足を踏み入れるには、先ほどQt Labsに投稿した例をご覧ください:リモートURLのドラッグアンドドロップをサポートする画像ビューア。前述の QNetworkAccessManager を使用して、ドロップされたURLから画像を取得します。 ソースコードを確認し、 150行のみです。
他のヒント
Ariyaの提案に従ってQNetworkAccessManagerを使用するように書き直し、この例を見て
これは、WindowsおよびLinuxで動作するようになりました。
Window::Window()
{
connect(&manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(retrieveData(QNetworkReply*)));
}
void Window::retrieveMessage()
{
manager.get(QNetworkRequest(QUrl("http://...")));
}
void Window::retrieveData(QNetworkReply *reply)
{
QVariant statusCodeV =
reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
// "200 OK" received?
if (statusCodeV.toInt()==200)
{
QByteArray bytes = reply->readAll(); // bytes
}
reply->deleteLater();
}
所属していません StackOverflow