問題タブ [qnetworkreply]
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.
c++ - QNetworkReply が不完全な XML データを返す
HTTP GET リクエストをリモート サーバーに送信しています。さまざまなパラメーターを使用して、関心のあるコンテンツを定義します。特にoutput=xml
、サーバーが XML として応答を返すようにするため、それがクエリに含まれていることを確認します。
クラスHttpRetriever
とそれぞれの間に次の接続がQNetworkReply
ありますQNetworkAccessManager
(slotStartRequest()QNetworkRequest
を参照):
ここで重要なスロットには、次の宣言があります。
slotFinishRequest():
slotReadyReadRequest():
内部では、次のslotFinishRequest()
ように呼び出しますprocessReply()
。
次のスロットを介して HTTP get リクエストをトリガーします。
ご覧のとおり、クラスとサーバー間のネットワーク通信の基盤を構築しましたが、XML 応答の解析とそこから必要な情報を抽出する作業はまだ開始していません。
問題は、私が(非常に頻繁に)どちらかを取得していることです
XML データの解析中にエラーが発生しました: 開始タグが必要です。
また
XML データの解析中にエラーが発生しました: ドキュメントの終わりが早すぎます
私のprocessReply()
機能で。これは、大量の返信 (数百行から数千行) を受け取るたびに発生します。私が小さなものを手に入れたときは決して起こりません(30-40行がギブまたはテイク)。
したがって、問題は明らかに、受信しているデータの量のどこかにあり、それが (または、受信したデータのチャンクをバッファリングするすべての Qt コンポーネント) によってまとめられる方法、QNetworkAccessManager
および/またはインスタンスをセットアップした方法にある可能性があります。私のクラスのネットワーク関連のコンポーネント。また、ここで重要なことに注意する必要があります。つまり、私のブラウザー ( HttpRequesterアドオンを備えた最新の Firefox) では、XML のサイズに関係なく、常に完全な XML を受信していることです。したがって、これは私のアプリケーション固有の問題であり、システムのネットワーク設定とは関係ありません。
windows-10 - 独自のカスタム QNetworkReply を作成するにはどうすればよいですか?
返信からカスタムバイトを返す独自のカスタム QNetworkReply クラスを作成しようとしています。私もオーバーロードした QNetworkAccessManager::createRequest() オーバーロードからそのクラスを返します。私の問題は、応答が「破損」しているため、関数のオーバーロードが呼び出されず、結果として QWebView の要求が失敗することです。Qt テスト ライブラリからインスピレーションを得ようとしましたが、うまくFakeReply
いきませんでした。
これが私のコードです:
そして .cpp ファイル:
クラスは次のように使用されます。