問題タブ [qnetworkaccessmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1650 参照

qt - QtのループでいくつかのURLリクエストを実行します

Qt では、複数のサーバーに接続して更新を確認する必要があり、そのために QNetworkAccessManager を使用しています。問題は、現在のリクエストが応答して終了するまで、次の URL に接続したくないことです。私の最初のアイデアは、以下のようなループを使用することでしたが、現在のURLが終了するまで次のURLに接続したくないという問題があります。

//もっといろいろなことをする }

問題を解決するための私の他のアイデアは、代わりに次のように構築することでした:

現在の URL が終了する前に次の URL が要求されることはありません。このソリューションの問題は、これらのメソッドで作成したものが削除されず、同時に多くの connection() と finishedSlot() が開かれ、メモリの問題が発生するという問題があることです。query.exec(sqlString) と関係があることはわかっています。これがないと、すべてが正常に機能するからです。しかし、なぜこれら 2 つのソリューション間でこれほど異なるのでしょうか?

これをどのように解決しますか?

0 投票する
2 に答える
11283 参照

windows - QNetworkAccessManagerのpost()メソッドを使用してファイルをアップロードする

Qtアプリケーションで問題が発生しています。特にQNetworkAccessManagerクラスを使用します。QNetworkAccessManagerのpost()メソッドを使用して、バイナリファイルの単純なHTTPアップロードを実行しようとしています。ドキュメントには、post()へのQIODeviceへのポインターを指定でき、クラスはQIODeviceで見つかったデータを送信すると記載されています。これは、post()にQFileへのポインターを与えることができるはずであることを私に示唆しています。例えば:

これを開発しているWindowsシステムで発生しているように見えるのは、QtアプリケーションがQFileからデータをプッシュした後、要求を完了しないことです。ファイルからさらにデータが表示されるのを待っているようです。アプリケーションを手動で強制終了するまで、POSTリクエストは「クローズ」されません。強制終了すると、ファイル全体がサーバー側に表示されます。

いくつかのデバッグと調査から、これは、ファイルの最後に到達したときにQFileのread()操作が-1を返さないために発生していると思います。QNetworkAccessManagerは、read()から-1を取得するまで、QIODeviceから読み取ろうとしていると思います。取得した時点で、データがなくなったと見なして要求を閉じます。read()からゼロの戻りコードを取得し続ける場合、QNetworkAccessManagerは、さらに多くのデータが来る可能性があると想定するため、その仮想データを待機し続けます。

いくつかのテストコードで、ファイルの最後まで読み取った後、QFileのread()操作がゼロを返すことを確認しました。これは、QNetworkAccessManagerのpost()メソッドがQIODeviceの動作を期待する方法と互換性がないようです。私の質問は次のとおりです。

  1. これは、QFileがWindowsで動作する方法に何らかの制限がありますか?
  2. QFileまたはQNetworkAccessManagerを使用してpost()を介してファイルをプッシュする他の方法はありますか?
  3. これはまったく機能しませんか?ファイルをアップロードする他の方法を見つける必要がありますか?

任意の提案やヒントをいただければ幸いです。

更新:クライアント側とサーバー側の2つの異なる問題が発生したことが判明しました。クライアント側では、ネットワークトランザクションの間、QFileオブジェクトが存在することを確認する必要がありました。QNetworkAccessManagerのpost()メソッドはすぐに戻りますが、実際にはすぐには終了しません。POSTが実際に終了するタイミングを決定するには、QNetworkAccessManagerのfinished()シグナルにスロットを接続する必要があります。私の場合、QFileをほぼ恒久的に維持するのは簡単でしたが、サーバーからのエラー応答をチェックするために、finished()シグナルにスロットを接続しました。

私はこのように信号をスロットに取り付けました:

ファイルを送信するときは、次のような郵便番号を記述しました(compressedFileは私のクラスのメンバーであるため、このコードの後でスコープから外れることはありません)。

QNetworkAccessManagerからのfinished(QNetworkReply *)シグナルは、postFinished(QNetworkReply *)メソッドをトリガーします。この場合、compressedFileを閉じて、compressedFileで表されるデータファイルを削除しても安全です。デバッグの目的で、トランザクションが完了したことを確認するために、いくつかのprintf()ステートメントも追加しました。

compressedFileはすぐには閉じられず、スコープから外れることもないため、QNetworkAccessManagerは、ファイルの送信に必要なだけの時間をかけることができます。最終的にトランザクションが完了し、postFinished()メソッドが呼び出されます。

私の他の問題(トランザクションが完了しなかった場所で見た動作にも影響しました)は、WebサーバーのPythonコードがPOSTを正しく処理していなかったことですが、これは元のQtの質問の範囲外です。

0 投票する
1 に答える
1376 参照

qt - Qt Jambi:QNetworkReplyのコンテンツへのアクセス

QNetworkReplyオブジェクトのコンテンツにアクセスできません。コンテンツが空またはゼロのようです。ドキュメント(c ++からjavaへの変換)によると、これは正しく設定されていると思いますが、役に立ちません。さらに、「不明なエラー」が報告されています。

どんなアイデアでも大歓迎です。コード:

0 投票する
1 に答える
545 参照

qt - Qtでブロックごとにダウンロードするには?

多くの理由で、1024 バイトごとにファイルをダウンロードする必要があります。

QnetworkAccessManager に何も見つかりません。サーバーがサポートしていないため、「ヘッダー技術」を使用できません。

http リクエストのヘッダーで「Content-Range: bytes 21010-47000/47022」のようなものを送信する技術をヘッダー技術と呼びます

0 投票する
1 に答える
12941 参照

qt - QNetworkRequestとデフォルトのSSL構成

次のコードを使用して、サーバーでHTTPSリクエストを作成しています。

すべてが私のテストサーバーで機能しているようですが、defaultConfigurationを設定することをお勧めするか(2行目のコメントを外す)、SSLを使用するときにネットワークAPIがすべてのdefaultConfigurationsを自動的にチェックするかどうかを知りたいですか?また、チェックする場合、カスタム構成を1つ追加した場合も同様に機能しますか?つまり、デフォルト構成のリストにカスタム構成を追加する必要がありますか?例えば:

編集:私はSymbianプラットフォームで作業していることを追加したいと思います。

0 投票する
1 に答える
2743 参照

qt - QEventLoop および QNAM での QTimer タイムアウトの問題

QNAM を利用し、HTTP 要求を送信する手段を提供する独自の HTTP クラスを作成しました。同期には QEventLoop を使用し、タイムアウトには QTimer を使用します。

私は自分のソリューションでいくつかの問題に直面しています。特定の Symbian プラットフォームでは、私の QTimer シグナルのタイムアウトが速すぎます (たとえば、タイムアウトが 30 秒のときに 1 秒後など)。これは通常、HTTP Post プレイロードが大きい場合、または GET を介してファイルをダウンロードしている場合に発生します (リクエストが完了するまでに時間がかかります)。特定のデバイス (S60 第 3 版) では同じコードが正常に動作することに注意したいのですが、一部のデバイス (第 5 版) ではほぼ常にこのエラーが発生します。

コード スニペットを次に示します。

個人的には、次のいずれかが問題を引き起こす可能性があると考えています。

  • ローカル イベント ループに再度入ると、信号が台無しになります
  • 同じ QNAM を複数回利用しています (同じセッション中に複数のリクエスト)。QNAM を破棄すると、サーバー側でセッションがダウンするため、これが必要です。

この動作を引き起こす可能性のあるエラーを誰かが見ることができますか?

プラットフォーム: Symbian S60 3rd/5th エディション

ツール: Nokia Qt SDK

0 投票する
1 に答える
796 参照

qt - 継続的にアップロードすると QNetworkReply エラー「メモリを割り当てられません」が発生する

GPSデータを受信し、データベースに保存してサーバーに投稿しようとするsymbian用のQtアプリケーションがあります。最初の 2 つのステップは正常に機能しますが、投稿を続けると、アプリケーションがクラッシュするか、インターネット接続が切断されます。

デバッグ目的でアプリケーションを変更して、10 秒ごとにのみサーバーにデータをポストするようにしました。アプリケーションは、メモリが大幅に増加することなく、約 45 ~ 90 分間正常に動作します。

その後、QNetworkReply から「メモリを割り当てられません」というエラーが表示されます。
同時に、メモリ使用量が約 63500 (バイト?) 増加します。
次のアップロードで、「無効なソケット記述子」という返信が返され、その後、QtCreator のデバッグ出力に「7 の例外 [setdefaultif(0) を実行します - ハック]」が表示されます。

ここで何がうまくいかないのか知っている人はいますか?これを引き起こしている可能性のあるアップロード コードのエラーを見つけることができません。

これが私のアップロードスクリプトです。

ほとんど忘れていましたが、Nokia N97mi​​ni、5230、および 5800 でこれをテストしましたが、すべて同じように動作します。

編集。インターネット接続が「停止」した場合でも、3G がオンになっていることはわかりますが、Web ブラウザを使用したインターネットへの接続は失敗します。アプリケーションを閉じて、ブラウザーでインターネットに接続しようとすると、「Web: メモリがいっぱいです...」と表示されます (アプリからの Web 要求は正常に動作します) Nokia Energy プロファイラーを使用していますが、メモリの兆候は見られませんいっぱいです。これをテストして、2 つのゲーム、ovi マップ、およびその他の多数のアプリケーションを開始したところ、40MB を超えるメモリを消費したにもかかわらず、正常に動作しました。

0 投票する
1 に答える
3361 参照

qt - QWebPage で使用されている QNetworkReply からデータを読み取る方法は?

QWebPageWeb ページとそのすべてのリソースをダウンロードするために使用します。同時に、このプロセス中に Qt によってダウンロードされる生データを保持したいと思います。QNetworkReply信号からデータを読み取ることによってこれを行うことvoid QNetworkAccessManager::finished(QNetworkReply * reply) は、データ自体が既に読み取られている可能性があるため、良い解決策ではありませんQWebPage。それの訳は

QNetworkReply はシーケンシャル アクセスの QIODevice です。つまり、データがオブジェクトから読み取られると、デバイスによって保持されなくなります。

詳しい説明通りですQNetworkReply

ただし、オーバーライドされたメソッドでQWebPageカスタムを使用するように構成できますQNetworkAccessManagercreateRequest

正しい解決策は、プロキシを作成してメソッドQNetworkReplyで返すことだと思います。createRequestこのプロキシは、元の場合と同様に、応答からデータを読み取ることができるようにする必要がありますQNetworkReply(そのため、QWebPageデータを読み取ることができます) QWebPage。言い換えれば、の基底クラスにはティーが必要です。QNetworkReplyIODevice

このプロキシの書き方

0 投票する
2 に答える
10861 参照

c++ - サーバーがCookieを必要とする場合のQTHTTPPostの問題

私はこの一日を試しましたが成功しませんでした。問題の解決にご協力ください。グーグルで、多くのユーザーがこの問題を抱えていることがわかりましたが、解決策を見つけることができませんでした。

私はQTC++でHTTPPOSTを実行しようとしていますが、Pythonでそれを実行しようとしています(私の質問はPythonの質問ではないので、Qtのプロが助けてください)。助けてください。考えられる解決策を提供してください。

Pythonでは、コードはクリーンでシンプルです。私はそれを簡単にするためにエラー処理とすべての余分なものを取り除きました。

私が作ったQT相当物:-

今問題は私がQTで同じことをすることができないということです。私が直面している問題:

  1. クッキーの取り扱い
  2. リダイレクトの処理(HTTP 302)
  3. 将来のPOSTを行うためにCookieを保持する

これはすべてPythonで自動的に行われます。以下では、コードは直接関連していませんが、POSTでリダイレクトできるようにこれをコーディングしました。コードは、作成に使用したリンクと非常によく似ています。

0 投票する
3 に答える
7071 参照

qt - QWebPage に特定の種類のリソースを読み込まないように指示する方法は?

QWebPagejs、css、png などの特定の種類のリソースを読み込まないようにするにはどうすればよいですか?