QNetworkAccessManager Class
QNetworkAccessManager クラスを使用すると、アプリケーションはネットワークリクエストを送信したり、応答を受け取ったりすることができます。詳細...
| ヘッダー: | #include <QNetworkAccessManager> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| 継承元: | QObject |
- 継承されたメンバーを含む、すべてのメンバーの一覧
- 非推奨のメンバ
- QNetworkAccessManager は、ネットワークプログラミング API の一部です。
注:このクラスのすべての関数は再入可能です。
パブリック型
| enum | Operation { HeadOperation, GetOperation, PutOperation, PostOperation, DeleteOperation, CustomOperation } |
パブリック関数
| QNetworkAccessManager(QObject *parent = nullptr) | |
| virtual | ~QNetworkAccessManager() |
| void | addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts) |
| bool | autoDeleteReplies() const |
| QAbstractNetworkCache * | cache() const |
| void | clearAccessCache() |
| void | clearConnectionCache() |
| void | connectToHost(const QString &hostName, quint16 port = 80) |
| void | connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration()) |
| void | connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName) |
| QNetworkCookieJar * | cookieJar() const |
| QNetworkReply * | deleteResource(const QNetworkRequest &request) |
| void | enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString()) |
| QNetworkReply * | get(const QNetworkRequest &request) |
(since 6.7) QNetworkReply * | get(const QNetworkRequest &request, QIODevice *data) |
(since 6.7) QNetworkReply * | get(const QNetworkRequest &request, const QByteArray &data) |
| QNetworkReply * | head(const QNetworkRequest &request) |
| bool | isStrictTransportSecurityEnabled() const |
| bool | isStrictTransportSecurityStoreEnabled() const |
| QNetworkReply * | post(const QNetworkRequest &request, QIODevice *data) |
| QNetworkReply * | post(const QNetworkRequest &request, QHttpMultiPart *multiPart) |
| QNetworkReply * | post(const QNetworkRequest &request, const QByteArray &data) |
(since 6.8) QNetworkReply * | post(const QNetworkRequest &request, std::nullptr_t nptr) |
| QNetworkProxy | proxy() const |
| QNetworkProxyFactory * | proxyFactory() const |
| QNetworkReply * | put(const QNetworkRequest &request, QIODevice *data) |
| QNetworkReply * | put(const QNetworkRequest &request, QHttpMultiPart *multiPart) |
| QNetworkReply * | put(const QNetworkRequest &request, const QByteArray &data) |
(since 6.8) QNetworkReply * | put(const QNetworkRequest &request, std::nullptr_t nptr) |
| QNetworkRequest::RedirectPolicy | redirectPolicy() const |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr) |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart) |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data) |
| void | setAutoDeleteReplies(bool shouldAutoDelete) |
| void | setCache(QAbstractNetworkCache *cache) |
| void | setCookieJar(QNetworkCookieJar *cookieJar) |
| void | setProxy(const QNetworkProxy &proxy) |
| void | setProxyFactory(QNetworkProxyFactory *factory) |
| void | setRedirectPolicy(QNetworkRequest::RedirectPolicy policy) |
| void | setStrictTransportSecurityEnabled(bool enabled) |
| void | setTransferTimeout(int timeout) |
(since 6.7) void | setTransferTimeout(std::chrono::milliseconds duration = QNetworkRequest::DefaultTransferTimeout) |
| QList<QHstsPolicy> | strictTransportSecurityHosts() const |
| virtual QStringList | supportedSchemes() const |
| int | transferTimeout() const |
(since 6.7) std::chrono::milliseconds | transferTimeoutAsDuration() const |
シグナル
| void | authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator) |
| void | encrypted(QNetworkReply *reply) |
| void | finished(QNetworkReply *reply) |
| void | preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator) |
| void | proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator) |
| void | sslErrors(QNetworkReply *reply, const QList<QSslError> &errors) |
保護された関数
| virtual QNetworkReply * | createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = nullptr) |
詳細な説明
ネットワークアクセス API は、1 つの QNetworkAccessManager オブジェクトを中心に構成されており、このオブジェクトは、送信するリクエストの共通の設定や構成を保持しています。これには、プロキシやキャッシュの設定、およびそれらに関連するシグナルに加え、ネットワーク操作の進行状況を監視するために使用できる応答シグナルが含まれています。 Qt アプリケーション全体に対して、1 つの QNetworkAccessManager インスタンスで十分です。QNetworkAccessManager は `QObject` に基づいているため、それが属するスレッドからのみ使用できます。
QNetworkAccessManagerオブジェクトが作成されると、アプリケーションはこれを使用してネットワーク経由でリクエストを送信できます。リクエストとオプションのデータを受け取り、それぞれQNetworkReply オブジェクトを返す一連の標準関数が用意されています。返されたオブジェクトは、対応するリクエストへの応答として返されたデータを取得するために使用されます。
ネットワークからの単純なダウンロードは、次のように実行できます。
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, &QNetworkAccessManager::finished,
this, &MyClass::replyFinished);
manager->get(QNetworkRequest(QUrl("http://qt-project.org")));QNetworkAccessManager は非同期 API を備えています。上記の `replyFinished ` スロットが呼び出されると、その引数として、ダウンロードされたデータおよびメタデータ(ヘッダーなど)を含む `QNetworkReply ` オブジェクトが渡されます。
注: リクエストが完了した後 、適切なタイミングでQNetworkReply オブジェクトを削除するのはユーザーの責任です。finished()に接続されたスロット内で直接削除しないでください。deleteLater()関数を使用できます。
注:QNetworkAccessManager は 、受信したリクエストをキューに入れます。並列で実行されるリクエストの数はプロトコルによって異なります。現在、デスクトッププラットフォーム上の HTTP プロトコルでは、1 つのホスト/ポートの組み合わせに対して 6 つのリクエストが並列で実行されます。
注:QNetworkAccessManagerは 、RFC 2616のセクション8.2.2を適切に処理していません。具体的には、書き込みが完了するまで受信データに応答しません。例えば、サーバーがクライアントに続行しないよう指示するステータスコードを返しても、大容量ファイルのアップロードは停止しません。
より詳細な例として、マネージャーがすでに存在していることを前提とした場合、次のようなものがあります:
QNetworkRequest request;
request.setUrl(QUrl("http://qt-project.org"));
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");
QNetworkReply *reply = manager->get(request);
connect(reply, &QIODevice::readyRead, this, &MyClass::slotReadyRead);
connect(reply, &QNetworkReply::errorOccurred,
this, &MyClass::slotError);
connect(reply, &QNetworkReply::sslErrors,
this, &MyClass::slotSslErrors);Qt 6.11以降、QNetworkAccessManagerが使用するTCPキープアライブパラメータのデフォルト値が変更されました。現在の設定では、2分間操作がないと接続が切断されます。
これらの設定は、QNetworkRequest API を使用して、個々のリクエストごとに変更することができ、より寛容にしたり、あるいはより厳格にしたりすることができます。
QNetworkRequest networkRequest(url);
networkRequest.setTcpKeepAliveIdleTimeBeforeProbes(20s);
networkRequest.setTcpKeepAliveIntervalBetweenProbes(2s);
networkRequest.setTcpKeepAliveProbeCount(5);上記のコードスニペットでは、30秒間の非アクティブ状態後に接続を切断するという、より積極的な戦略を採用しています。これは、例えばLinuxにおけるネットワーク環境の変化によって引き起こされるネットワークのハングを早期に検出する場合などに役立ちます。
QNetworkRequest 、QNetworkReply 、およびQNetworkProxyも参照してください 。
メンバ型のドキュメント
enum QNetworkAccessManager::Operation
この応答が処理している操作を示します。
| 定数 | 値 | 説明 |
|---|---|---|
QNetworkAccessManager::HeadOperation | 1 | ヘッダーの取得操作(head() で作成) |
QNetworkAccessManager::GetOperation | 2 | ヘッダーの取得およびコンテンツのダウンロード(get() で作成) |
QNetworkAccessManager::PutOperation | 3 | コンテンツのアップロード操作(put() で作成) |
QNetworkAccessManager::PostOperation | 4 | HTML フォームの内容を HTTP POST 経由で処理のために送信する (post() を使用して作成) |
QNetworkAccessManager::DeleteOperation | 5 | コンテンツの削除操作(deleteResource() で作成) |
QNetworkAccessManager::CustomOperation | 6 | カスタム操作(sendCustomRequest() で作成) |
QNetworkReply::operation()も参照してください 。
メンバ関数のドキュメント
[explicit] QNetworkAccessManager::QNetworkAccessManager(QObject *parent = nullptr)
Network Access APIの中核となるQNetworkAccessManagerオブジェクトを生成し、parent を親オブジェクトとして設定します。
[virtual noexcept] QNetworkAccessManager::~QNetworkAccessManager()
QNetworkAccessManager オブジェクトを破棄し、関連するリソースを解放します。なお、このクラスから返されるQNetworkReply オブジェクトには、このオブジェクトが親として設定されています。つまり、それらのオブジェクトに対してQObject::setParent()を呼び出さない限り、このオブジェクトとともに削除されてしまいます。
void QNetworkAccessManager::addStrictTransportSecurityHosts(const QList<QHstsPolicy> &knownHosts)
HSTSキャッシュにHTTP Strict Transport Securityポリシーを追加します。knownHosts には、QHstsPolicy 情報を有する既知のホストが含まれています。
注: 有効期限が切れたポリシーがある 場合、以前にキャッシュに存在していた既知のホストはキャッシュから削除されます。
注: HTTP レスポンスの処理中 、QNetworkAccessManager は HSTS キャッシュを更新し、既存のポリシーを削除または更新したり、新しいknownHosts を追加したりすることもできます。したがって、現在の実装はサーバー主導型であり、クライアントコードはQNetworkAccessManager に、以前に知られていた、または発見されたポリシーを提供できますが、この情報は「Strict-Transport-Security」レスポンスヘッダーによって上書きされる可能性があります。
strictTransportSecurityHosts()、enableStrictTransportSecurityStore()、およびQHstsPolicyも参照してください 。
[signal] void QNetworkAccessManager::authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)
このシグナルは、最終サーバーが要求されたコンテンツを配信する前に認証を要求した際に発せられます。このシグナルに接続されたスロットは、authenticator オブジェクト内に、そのコンテンツの認証情報(reply オブジェクトを検査することで確認可能)を設定する必要があります。
QNetworkAccessManager は、認証情報を内部でキャッシュし、サーバーが再度認証を要求した場合、authenticationRequired()シグナルを発行することなく、同じ値を送信します。サーバーが認証情報を拒否した場合は、このシグナルが再度発行されます。
注: リクエストで 認証情報を送信しないようにするには 、authenticator オブジェクトに対してsetUser()やsetPassword()を呼び出してはなりません。そうすると、finished()シグナルが、エラー「AuthenticationRequiredError 」を含むQNetworkReply と共に発火します。
注: このシグナルへの接続にQueuedConnectionを使用することはできません 。シグナルが返された時点で、認証情報に新しい情報が設定されていない場合、接続は失敗するからです。
proxyAuthenticationRequired()、QAuthenticator::setUser()、およびQAuthenticator::setPassword()も参照してください 。
bool QNetworkAccessManager::autoDeleteReplies() const
QNetworkAccessManager が現在、QNetworkReplies を自動的に削除するように設定されている場合は true を返し、そうでない場合は false を返します。
「 setAutoDeleteReplies 」および「QNetworkRequest::AutoDeleteReplyOnFinishAttribute 」も参照してください 。
QAbstractNetworkCache *QNetworkAccessManager::cache() const
ネットワークから取得したデータを格納するために使用されるキャッシュを返します。
setCache()も参照してください 。
void QNetworkAccessManager::clearAccessCache()
認証データおよびネットワーク接続の内部キャッシュをクリアします。
この関数は、自動テストを行う際に役立ちます。
clearConnectionCache()も参照してください 。
void QNetworkAccessManager::clearConnectionCache()
ネットワーク接続の内部キャッシュをクリアします。clearAccessCache() とは異なり、認証データは保持されます。
clearAccessCache()も参照してください 。
void QNetworkAccessManager::connectToHost(const QString &hostName, quint16 port = 80)
hostName で指定されたホストのport ポートへの接続を開始します。この関数は、HTTP リクエストを送信する前にホストとの TCP ハンドシェイクを完了させるのに役立ち、ネットワークの遅延を低減することができます。
注:この 関数には 、エラーを報告する機能はありません。
関連項目: connectToHostEncrypted(),get(),post(),put(),deleteResource()。
void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port = 443, const QSslConfiguration &sslConfiguration = QSslConfiguration::defaultConfiguration())
hostName で指定されたホストのポートport に対して、sslConfiguration を使用して接続を開始します。この関数は、HTTPS リクエストを送信する前にホストとの TCP および SSL ハンドシェイクを完了させるのに役立ち、ネットワークの遅延を低減することができます。
注: HTTP/2 接続の事前確立は 、sslConfiguration に対して setAllowedNextProtocols() を呼び出し、許可されたプロトコルのリストにQSslConfiguration::ALPNProtocolHTTP2 を含めることで行うことができます。HTTP/2 を使用する場合、ホストごとに 1 つの接続で十分です。つまり、ホストごとにこのメソッドを複数回呼び出しても、ネットワーク処理の高速化にはつながりません。
注:この 関数には 、エラーを報告する機能はありません。
関連項目: connectToHost()、get()、post()、put()、およびdeleteResource()。
void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName)
hostName で指定されたホストのポートport に対して、sslConfiguration を使用し、peerName を証明書検証に使用するホスト名として設定して接続を開始します。この関数は、HTTPS リクエストを送信する前にホストとの TCP および SSL ハンドシェイクを完了させるのに役立ち、ネットワークの遅延を低減できます。
注: HTTP/2接続の事前確立は 、sslConfiguration に対してsetAllowedNextProtocols()を呼び出し、許可されたプロトコルのリストにQSslConfiguration::ALPNProtocolHTTP2 を含めることで行えます。HTTP/2を使用する場合、ホストごとに1つの接続で十分です。つまり、ホストごとにこのメソッドを複数回呼び出しても、ネットワーク通信の高速化にはつながりません。
注:この 関数には エラーを報告する機能はありません。
これはオーバーロードされた関数です。
関連項目: connectToHost()、get()、post()、put()、およびdeleteResource()。
QNetworkCookieJar *QNetworkAccessManager::cookieJar() const
ネットワークから取得したクッキーや、送信されようとしているクッキーを格納するために使用されるQNetworkCookieJar を返します。
setCookieJar()も参照してください 。
[virtual protected] QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &originalReq, QIODevice *outgoingData = nullptr)
op 操作およびoriginalReq リクエストを処理するための新しいQNetworkReply オブジェクトを返します。Get および Head リクエストの場合、デバイスoutgoingData は常に 0 ですが、これらの操作においてpost() およびput() に渡される値となります(QByteArray のバリエーションでは、QBuffer オブジェクトが渡されます)。
デフォルトの実装では、setCookieJar() で設定されたクッキージャーに対してQNetworkCookieJar::cookiesForUrl() を呼び出し、リモートサーバーに送信するクッキーを取得します。
返されるオブジェクトは、オープン状態である必要があります。
QNetworkReply *QNetworkAccessManager::deleteResource(const QNetworkRequest &request)
URL「request 」で指定されたリソースを削除するリクエストを送信します。
注:この 機能は現在、HTTP でのみ利用可能であり、HTTP DELETE リクエストを実行します。
関連項目: get(),post(),put(), およびsendCustomRequest()。
void QNetworkAccessManager::enableStrictTransportSecurityStore(bool enabled, const QString &storeDir = QString())
enabled がtrue の場合、内部HSTSキャッシュは永続ストレージを使用してHSTSポリシーを読み書きします。storeDir は、このストレージの配置場所を定義します。デフォルトの場所はQStandardPaths::CacheLocation によって定義されます。書き込み可能なQStandartPaths::CacheLocationが存在せず、かつstoreDir が空の文字列である場合、ストレージはプログラムの作業ディレクトリに配置されます。
注: 永続ストアが有効化された時点で、HSTS キャッシュにすでに HSTS ポリシーが含まれている場合 、これらのポリシーはストアに保持されます。 キャッシュとストアの両方に同じ既知のホストが含まれている場合、キャッシュ内のポリシーの方が最新であるとみなされます(したがって、ストア内の以前の値が上書きされます)。この動作が望ましくない場合は、Strict Transport Securityを有効にする前にHSTSストアを有効にしてください。デフォルトでは、HSTSポリシーの永続ストアは無効になっています。
注: HSTSストアは 、暗号化や完全性保護を行わずに、INI 形式の `QSettings ` を使用してポリシーをディスクに永続化します。Strict-Transport-Security ヘッダーを送信するホストごとに HSTS エントリが記録されるため、このストアからは、アプリケーションが HTTPS 経由で通信したホストが明らかになります。プライバシーが重要なアプリケーションでは、この接続履歴を機密データとして扱う必要があります。
ストアファイルへの書き込み権限を持つ攻撃者は、特定のドメインに対する HSTS エントリを削除することができ、その結果、アプリケーションは以降の要求においてそれらのドメインへの平文 HTTP 接続を許可することになり、SSL ストリッピング攻撃を可能にする恐れがあります。HSTS に依存するアプリケーションは、ストアディレクトリが適切なファイルシステム権限によって保護されていることを確認する必要があります。
関連項目: isStrictTransportSecurityStoreEnabled()、setStrictTransportSecurityEnabled()、およびQStandardPaths::standardLocations()も参照してください 。
[signal] void QNetworkAccessManager::encrypted(QNetworkReply *reply)
このシグナルは、SSL/TLSセッションの初期ハンドシェイクが正常に完了した際に発信されます。この時点では、ユーザーデータはまだ送信されていません。このシグナルを使用すると、証明書チェーンに対する追加のチェックを行うことができます。例えば、Webサイトの証明書が変更された際にユーザーに通知する場合などが挙げられます。reply パラメータは、対象となるネットワーク応答を指定します。応答が期待される基準に一致しない場合、このシグナルに接続されたスロットからQNetworkReply::abort()を呼び出すことで、その応答を中止する必要があります。使用中のSSL設定は、QNetworkReply::sslConfiguration()メソッドを使用して確認できます。
内部的には、QNetworkAccessManager はリクエストを並行して処理できるように、サーバーに対して複数の接続を開く場合があります。これらの接続は再利用される可能性があるため、encrypted()シグナルは発火しない場合があります。つまり、QNetworkAccessManager のライフサイクルにおいて、サイトへの最初の接続に対してのみ、このシグナルを受け取ることが保証されます。
QSslSocket::encrypted() およびQNetworkReply::encrypted()も参照してください 。
[signal] void QNetworkAccessManager::finished(QNetworkReply *reply)
このシグナルは、保留中のネットワーク応答が完了するたびに発せられます。reply パラメータには、完了したばかりの応答へのポインタが格納されます。このシグナルは、QNetworkReply::finished()シグナルと併せて発せられます。
オブジェクトがどのような状態になるかについては、QNetworkReply::finished() を参照してください。
注: このシグナルに接続されたスロット内で、reply オブジェクトを削除しないでください 。deleteLater()を使用してください。
「 QNetworkReply::finished()」および「QNetworkReply::error()」も参照してください 。
QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request)
対象のrequest のコンテンツを取得するリクエストを送信し、読み取り用に開かれた新しいQNetworkReply オブジェクトを返します。このオブジェクトは、新しいデータが届くたびにreadyRead()シグナルを発行します。
コンテンツおよび関連するヘッダーがダウンロードされます。
post()、put()、deleteResource()、およびsendCustomRequest()も参照してください 。
[since 6.7] QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request, QIODevice *data)
注: メッセージ本文を含む GET リクエストは キャッシュされません。
注: リクエストがリダイレクトされた場合 、ステータスコードが 308 の場合にのみ、メッセージ本文が保持されます。
これはオーバーロードされた関数です。
この関数は Qt 6.7 で導入されました。
[since 6.7] QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request, const QByteArray &data)
注: メッセージ本文を含む GET リクエストは キャッシュされません。
注: リクエストがリダイレクトされた場合 、ステータスコードが 308 の場合にのみ、メッセージ本文が保持されます。
これはオーバーロードされた関数です。
この関数は Qt 6.7 で導入されました。
QNetworkReply *QNetworkAccessManager::head(const QNetworkRequest &request)
request のネットワークヘッダーを取得するためのリクエストを送信し、それらのヘッダーを含む新しい `QNetworkReply ` オブジェクトを返します。
この関数の名前は、関連するHTTPリクエスト(HEAD)に由来しています。
bool QNetworkAccessManager::isStrictTransportSecurityEnabled() const
HTTP Strict Transport Security (HSTS) が有効になっている場合、true を返します。デフォルトでは、HSTS は無効になっています。
setStrictTransportSecurityEnabled()も参照してください 。
bool QNetworkAccessManager::isStrictTransportSecurityStoreEnabled() const
HSTSキャッシュがHSTSポリシーの読み込みおよび保存に永続ストレージを使用している場合、trueを返します。
enableStrictTransportSecurityStore()も参照してください 。
QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, QIODevice *data)
request で指定された宛先に HTTP POST リクエストを送信し、サーバーから送信された応答を含む、読み取り用に開かれた新しいQNetworkReply オブジェクトを返します。data デバイスの内容はサーバーにアップロードされます。
data このオブジェクトは読み取り用にオープンされている必要があり、この応答に対してfinished() シグナルが発行されるまで有効な状態を維持する必要があります。
注: HTTP および HTTPS 以外のプロトコルで POST リクエストを送信することは 未定義であり、おそらく失敗するでしょう。
関連項目: get()、put()、deleteResource()、およびsendCustomRequest()。
QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, QHttpMultiPart *multiPart)
multiPart メッセージの内容を、request で指定された宛先に送信します。
これは、HTTP 経由で MIME マルチパートメッセージを送信するために使用できます。
これはオーバーロードされた関数です。
QHttpMultiPart 、QHttpPart 、およびput()も参照してください 。
QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, const QByteArray &data)
data のバイト配列の内容を、request で指定された宛先に送信します。
これはオーバーロードされた関数です。
[since 6.8] QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, std::nullptr_t nptr)
request で指定された POST リクエストを、ボディなしで送信し、新しいQNetworkReply オブジェクトを返します。
これはオーバーロードされた関数です。
この関数は Qt 6.8 で導入されました。
[signal] void QNetworkAccessManager::preSharedKeyAuthenticationRequired(QNetworkReply *reply, QSslPreSharedKeyAuthenticator *authenticator)
この信号は、SSL/TLSハンドシェイクでPSK暗号スイートがネゴシエートされ、その結果PSK認証が必要となった場合に発信されます。reply オブジェクトは、そのような暗号スイートをネゴシエートしているQNetworkReply です。
PSK を使用する場合、SSL ハンドシェイクを継続するためには、クライアントはサーバーに対して有効な識別情報と有効な事前共有鍵を送信する必要があります。アプリケーションは、このシグナルに接続されたスロット内で、渡されたauthenticator オブジェクトを必要に応じて設定することで、この情報を提供できます。
注: このシグナルを無視したり 、必要な認証情報を提供しなかったりすると、ハンドシェイクが失敗し、その結果、接続が中断されます。
注: authenticator オブジェクトは replyが所有しており、アプリケーション側で削除してはなりません。
「QSslPreSharedKeyAuthenticator」も参照してください 。
QNetworkProxy QNetworkAccessManager::proxy() const
この `QNetworkAccessManager ` オブジェクトを使用して送信されるリクエストで利用される `QNetworkProxy ` を返します。プロキシのデフォルト値は `QNetworkProxy::DefaultProxy` です。
setProxy()、setProxyFactory()、およびproxyAuthenticationRequired()も参照してください 。
[signal] void QNetworkAccessManager::proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
このシグナルは、プロキシが認証を要求した際に、QNetworkAccessManager が有効なキャッシュ済み認証情報を見つけられなかった場合に発せられます。このシグナルに接続されたスロットは、authenticator オブジェクト内のプロキシproxy に対する認証情報を入力する必要があります。
QNetworkAccessManager は、認証情報を内部でキャッシュします。次にプロキシが認証を要求した際、QNetworkAccessManager は proxyAuthenticationRequired シグナルを再度発信することなく、自動的に同じ認証情報を送信します。
プロキシが認証情報を拒否した場合、QNetworkAccessManager は再度このシグナルを発行します。
proxy()、setProxy()、およびauthenticationRequired()も参照してください 。
QNetworkProxyFactory *QNetworkAccessManager::proxyFactory() const
このQNetworkAccessManager オブジェクトが、リクエストに使用するプロキシを決定するために使用しているプロキシファクトリを返します。
この関数が返すポインタはQNetworkAccessManager によって管理されており、いつでも削除される可能性があることに注意してください。
setProxyFactory() およびproxy()も参照してください 。
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QIODevice *data)
data の内容を宛先request にアップロードし、応答用にオープンされる新しいQNetworkReply オブジェクトを返します。
data この関数が呼び出される時点で、finished は読み取り用にオープンされている必要があり、この応答に対して ()シグナルが発信されるまで有効な状態を維持しなければなりません。
返されたオブジェクトから何かを読み取ることができるかどうかは、プロトコルに依存します。HTTP の場合、サーバーはアップロードが成功した(または失敗した)ことを示す小さな HTML ページを送信することがあります。他のプロトコルでは、おそらく応答にコンテンツが含まれるでしょう。
注: HTTPの場合 、このリクエストは PUT リクエストを送信しますが、ほとんどのサーバーではこれを許可していません。HTML フォームを介したファイルアップロードを含むフォームアップロードの仕組みでは、POST メカニズムが使用されます。
関連項目: get()、post()、deleteResource()、およびsendCustomRequest()も参照してください 。
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QHttpMultiPart *multiPart)
multiPart メッセージの内容を、request で指定された宛先に送信します。
これは、HTTP 経由で MIME マルチパートメッセージを送信するために使用できます。
これはオーバーロードされた関数です。
QHttpMultiPart 、QHttpPart 、およびpost()も参照してください 。
QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, const QByteArray &data)
data のバイト配列の内容を、request で指定された宛先に送信します。
これはオーバーロードされた関数です。
[since 6.8] QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, std::nullptr_t nptr)
request で指定された PUT リクエストを、ボディなしで送信し、新しいQNetworkReply オブジェクトを返します。
これはオーバーロードされた関数です。
この関数は Qt 6.8 で導入されました。
QNetworkRequest::RedirectPolicy QNetworkAccessManager::redirectPolicy() const
新しいリクエストを作成する際に使用されるリダイレクトポリシーを返します。
setRedirectPolicy() およびQNetworkRequest::RedirectPolicyも参照してください 。
QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr)
URL「request 」で指定されたサーバーに対して、カスタムリクエストを送信します。
HTTP仕様に従って有効なverb をサーバーに送信するのは、ユーザーの責任です。
このメソッドは、get() やpost() などを通じて提供される一般的な動詞以外の動詞(例えば、HTTP OPTIONS コマンドなど)を送信するための手段を提供します。
data が空でない場合、data デバイスの内容がサーバーにアップロードされます。その場合、データは読み取り可能である必要があり、この応答に対してfinished() シグナルが発行されるまで有効なままである必要があります。
注:この 機能は 現在、HTTP(S) でのみ利用可能です。
関連項目: get()、post()、put()、およびdeleteResource()も参照してください 。
QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart)
URL「request 」で指定されたサーバーに対して、カスタムリクエストを送信します。
multiPart メッセージの内容を、request で指定された宛先に送信します。
これは、カスタム動詞向けの MIME マルチパートメッセージの送信に使用できます。
これはオーバーロードされた関数です。
QHttpMultiPart 、QHttpPart 、およびput()も参照してください 。
QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data)
data のバイト配列の内容を、request で指定された宛先に送信します。
これはオーバーロードされた関数です。
void QNetworkAccessManager::setAutoDeleteReplies(bool shouldAutoDelete)
QNetworkReplies の自動削除を有効または無効にします。
shouldAutoDelete をtrueに設定すると、QNetworkRequest で既に明示的に設定されていない限り、このQNetworkAccessManager インスタンスに渡される今後のすべての QNetworkRequests に対して、QNetworkRequest::AutoDeleteReplyOnFinishAttribute 属性をtrueに設定するのと同じ効果があります。
autoDeleteReplies およびQNetworkRequest::AutoDeleteReplyOnFinishAttributeも参照してください 。
void QNetworkAccessManager::setCache(QAbstractNetworkCache *cache)
マネージャーのネットワークキャッシュを、指定されたcache に設定します。このキャッシュは、マネージャーによってディスパッチされるすべてのリクエストに使用されます。
この関数を使用すると、ネットワークキャッシュオブジェクトを、クッキーを永続ストレージに保存するなどの追加機能を実装するクラスに設定できます。
注: QNetworkAccessManager は 、cache オブジェクトの所有権を取得します。
QNetworkAccessManager デフォルトでは、キャッシュは設定されていません。Qt には、QNetworkDiskCache というシンプルなディスクキャッシュが用意されており、これを使用することができます。
cache() およびQNetworkRequest::CacheLoadControlも参照してください 。
void QNetworkAccessManager::setCookieJar(QNetworkCookieJar *cookieJar)
マネージャーのクッキージャーを、指定されたcookieJar に設定します。このクッキージャーは、マネージャーによってディスパッチされるすべてのリクエストで使用されます。
この関数を使用すると、Cookie Jar オブジェクトを、Cookie を永続ストレージに保存するなどの追加機能を実装するクラスに設定できます。
注: ` QNetworkAccessManager ` は `cookieJar ` オブジェクトの所有権を取得します。
cookieJar がこのQNetworkAccessManager と同じスレッドにある場合、cookieJar の親を設定し、このオブジェクトが削除されると同時にCookie Jarも削除されるようにします。異なるQNetworkAccessManager オブジェクト間でCookie Jarを共有したい場合は、この関数を呼び出した後にCookie Jarの親を0に設定することをお勧めします。
QNetworkAccessManager デフォルトでは、独自のクッキーポリシーは実装されていません。つまり、クッキーが正しい形式であり、最低限のセキュリティ要件(クッキーのドメインがリクエストのドメインと一致し、クッキーのパスがリクエストのパスと一致すること)を満たしている限り、サーバーから送信されたすべてのクッキーを受け入れます。独自のセキュリティポリシーを実装するには、QNetworkCookieJar::cookiesForUrl() およびQNetworkCookieJar::setCookiesFromUrl() の仮想関数をオーバーライドしてください。 これらの関数は、QNetworkAccessManager が新しいクッキーを検出した際に呼び出されます。
cookieJar()、QNetworkCookieJar::cookiesForUrl()、およびQNetworkCookieJar::setCookiesFromUrl()も参照してください 。
void QNetworkAccessManager::setProxy(const QNetworkProxy &proxy)
今後のリクエストで使用するプロキシをproxy に設定します。これは、すでに送信済みのリクエストには影響しません。プロキシが認証を要求した場合は、proxyAuthenticationRequired() シグナルが発信されます。
この関数で設定されたプロキシは、QNetworkAccessManager から発行されるすべてのリクエストに使用されます。場合によっては、送信されるリクエストの種類や宛先ホストに応じて、異なるプロキシを選択する必要があるかもしれません。その場合は、setProxyFactory() の使用を検討してください。
proxy() およびproxyAuthenticationRequired()も参照してください 。
void QNetworkAccessManager::setProxyFactory(QNetworkProxyFactory *factory)
このクラスのプロキシファクトリを `factory` に設定します。プロキシファクトリは、すべてのリクエストに対して同じプロキシ値を使用しようとするのではなく、特定のリクエストに対して使用するプロキシのより具体的なリストを決定するために使用されます。
QNetworkAccessManager から送信されるすべてのクエリは、QNetworkProxyQuery::UrlRequest 型になります。
たとえば、プロキシファクトリは次のようなルールを適用できます。
- 宛先アドレスがローカルネットワーク内にある場合(例えば、ホスト名にドットが含まれていない場合や、組織の範囲内のIPアドレスである場合など)、QNetworkProxy::NoProxy
- リクエストがFTPの場合は、FTPプロキシを返す
- リクエストが HTTP または HTTPS の場合は、HTTP プロキシを返す
- それ以外の場合は、SOCKSv5 プロキシサーバーを返す
オブジェクト `factory ` のライフタイムは、QNetworkAccessManager によって管理されます。必要に応じて、このオブジェクトを削除します。
注: setProxy() で特定のプロキシが設定されている場合 、ファクトリは使用されません。
関連項目: proxyFactory()、setProxy()、およびQNetworkProxyQuery 。
void QNetworkAccessManager::setRedirectPolicy(QNetworkRequest::RedirectPolicy policy)
マネージャーのリダイレクトポリシーを、指定されたpolicy に設定します。このポリシーは、マネージャーによってその後生成されるすべてのリクエストに影響します。
この関数を使用して、マネージャーレベルでの HTTP リダイレクトを有効または無効にします。
注: リクエストを作成する際、 QNetworkRequest::RedirectAttributePolicy が最優先され、次にマネージャーのポリシーが優先されます。
デフォルト値は `QNetworkRequest::NoLessSafeRedirectPolicy` です。手動によるリダイレクト処理に依存するクライアントは、コード内でこのポリシーを明示的に設定することを推奨します。
redirectPolicy() およびQNetworkRequest::RedirectPolicyも参照してください 。
void QNetworkAccessManager::setStrictTransportSecurityEnabled(bool enabled)
enabled がtrue に設定されている場合、QNetworkAccessManager はHTTP Strict Transport Securityポリシー(HSTS、RFC6797)に従います。リクエストを処理する際、QNetworkAccessManager は自動的に「http」スキームを「https」に置き換え、HSTSホストに対してはセキュアなトランスポートを使用します。明示的に設定されている場合、ポート80はポート443に置き換えられます。
HSTSが有効になっている場合、HSTSヘッダーを含み、安全な通信プロトコル経由で受信された各HTTPレスポンスに対して、QNetworkAccessManager はHSTSキャッシュを更新します。具体的には、有効なポリシーを持つホストを記憶するか、HSTSポリシーの有効期限が切れている、または無効になっているホストを削除します。
isStrictTransportSecurityEnabled()も参照してください 。
void QNetworkAccessManager::setTransferTimeout(int timeout)
timeout を転送タイムアウト(ミリ秒単位)として設定します。
setTransferTimeout(std::chrono::milliseconds)、transferTimeout()、およびtransferTimeoutAsDuration()も参照してください 。
[since 6.7] void QNetworkAccessManager::setTransferTimeout(std::chrono::milliseconds duration = QNetworkRequest::DefaultTransferTimeout)
データが交換されない場合に転送を中止するためのタイムアウトduration を設定します。
タイムアウトが切れるまでにデータが転送されない場合、転送は中止されます。0 を指定すると、タイマーは設定されません。引数が指定されない場合、タイムアウトは `QNetworkRequest::DefaultTransferTimeout` となります。この関数が呼び出されない場合、タイムアウトは無効となり、値は 0 になります。 実行されるリクエストに対して個別に設定されたゼロ以外のタイムアウト値は、この値よりも優先されます。つまり、QNetworkAccessManager でタイムアウトが有効になっている場合、タイムアウトなしでリクエストを実行するには、そのタイムアウトを無効にする必要があります。
この関数は Qt 6.7 で導入されました。
transferTimeoutAsDuration()も参照してください 。
[signal] void QNetworkAccessManager::sslErrors(QNetworkReply *reply, const QList<QSslError> &errors)
このシグナルは、SSL/TLSセッションの確立中に、証明書の検証エラーなど、何らかのエラーが発生した場合に発せられます。errors パラメータにはエラーの一覧が含まれ、reply には、これらのエラーが発生しているQNetworkReply が指定されます。
エラーが致命的ではなく、接続を続行すべきであることを示すには、このシグナルに接続されたスロットからQNetworkReply::ignoreSslErrors()関数を呼び出す必要があります。これが呼び出されない場合、データ(URLを含む)のやり取りが行われる前にSSLセッションは切断されます。
このシグナルを使用して、セキュリティが侵害されている可能性があることを示すエラーメッセージをユーザーに表示したり、SSL設定を表示したりすることができます(SSL設定を取得するには sslConfiguration() を参照してください)。ユーザーがリモート証明書を分析した結果、続行することを決定した場合は、スロットで ignoreSslErrors() を呼び出す必要があります。
QSslSocket::sslErrors()、QNetworkReply::sslErrors()、QNetworkReply::sslConfiguration()、およびQNetworkReply::ignoreSslErrors()も参照してください 。
QList<QHstsPolicy> QNetworkAccessManager::strictTransportSecurityHosts() const
HTTP Strict Transport Security (HSTS) ポリシーのリストを返します。HSTS キャッシュが「Strict-Transport-Security」レスポンスヘッダーから更新された場合、このリストは、addStrictTransportSecurityHosts() を通じて最初に設定された内容とは異なる場合があります。
addStrictTransportSecurityHosts() およびQHstsPolicyも参照してください 。
[virtual] QStringList QNetworkAccessManager::supportedSchemes() const
アクセスマネージャーがサポートするすべてのURLスキームを一覧表示します。
QNetworkAccessManager のサブクラスで独自のサポート対象スキームを提供するには、このメソッドを再実装してください。たとえば、サブクラスで新しいプロトコルのサポートを提供する場合などに必要となります。
int QNetworkAccessManager::transferTimeout() const
転送に使用されるタイムアウトをミリ秒単位で返します。
setTransferTimeout()も参照してください 。
[since 6.7] std::chrono::milliseconds QNetworkAccessManager::transferTimeoutAsDuration() const
データが交換されない場合に、転送が中止されるまでのタイムアウト時間を返します。
デフォルトの時間は 0 であり、これはタイムアウトが使用されないことを意味します。
この関数は Qt 6.7 で導入されました。
setTransferTimeout (std::chrono::milliseconds)も参照してください 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.