私のqhttp get()呼び出しはWindowsでは動作しませんが、Linuxでは動作します

StackOverflow https://stackoverflow.com/questions/803088

  •  03-07-2019
  •  | 
  •  

質問

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 リモート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();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top