이 페이지에서

QNetworkAccessManager Class

QNetworkAccessManager 클래스를 사용하면 애플리케이션에서 네트워크 요청을 보내고 응답을 받을 수 있습니다. 더 보기...

헤더: #include <QNetworkAccessManager>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
상속: QObject

참고: 이 클래스의 모든 함수는 재입력 가능합니다.

공개 유형

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는 하나의 QNetworkAccessManager 객체를 중심으로 구성되어 있으며, 이 객체는 전송하는 요청에 대한 공통 구성 및 설정을 보관합니다. 여기에는 프록시 및 캐시 구성은 물론, 이와 관련된 신호와 네트워크 작업의 진행 상황을 모니터링하는 데 사용할 수 있는 응답 신호가 포함되어 있습니다. Qt 애플리케이션 전체에 대해 하나의 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 프로토콜의 경우, 하나의 호스트/포트 조합에 대해 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 Keepalive 매개변수의 기본값이 변경되었습니다. 현재 설정에서는 2분 동안 활동이 없으면 연결이 종료됩니다.

QNetworkRequest API를 통해 개별 요청에 대해 이 설정을 변경하여 더 관대하게 하거나, 반대로 더 엄격하게 설정할 수 있습니다.

QNetworkRequest networkRequest(url);
networkRequest.setTcpKeepAliveIdleTimeBeforeProbes(20s);
networkRequest.setTcpKeepAliveIntervalBetweenProbes(2s);
networkRequest.setTcpKeepAliveProbeCount(5);

위의 코드 조각에서는 30초 동안 비활성 상태일 경우 연결을 종료하는, 더 공격적인 전략을 선택하고 있습니다. 이는 예를 들어, 리눅스에서 네트워크 변경으로 인한 네트워크 멈춤 현상을 조기에 감지하는 데 유용할 수 있습니다.

QNetworkRequest, QNetworkReply 및 QNetworkProxy도 참조하십시오 .

멤버 유형 문서

enum QNetworkAccessManager::Operation

이 응답이 처리 중인 작업을 나타냅니다.

상수값설명
QNetworkAccessManager::HeadOperation1헤더 검색 작업 ( head()로 생성됨)
QNetworkAccessManager::GetOperation2헤더 검색 및 콘텐츠 다운로드 ( get()로 생성됨)
QNetworkAccessManager::PutOperation3콘텐츠 업로드 작업 ( put()로 생성됨)
QNetworkAccessManager::PostOperation4HTTP POST를 통해 처리를 위해 HTML 양식 내용을 전송 ( post()로 생성됨)
QNetworkAccessManager::DeleteOperation5콘텐츠 삭제 작업 ( deleteResource()로 생성됨)
QNetworkAccessManager::CustomOperation6사용자 정의 작업 ( sendCustomRequest()로 생성됨)

QNetworkReply::operation()도 참조하십시오 .

멤버 함수 문서

[explicit] QNetworkAccessManager::QNetworkAccessManager(QObject *parent = nullptr)

네트워크 액세스 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() 신호가 QNetworkReply 와 함께 오류 AuthenticationRequiredError 를 동반하여 발생합니다.

참고: 이 신호에 연결하기 위해 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())

sslConfiguration 를 사용하여 hostName 로 지정된 호스트의 port 포트에 대한 연결을 시작합니다. 이 함수는 HTTPS 요청을 보내기 전에 호스트와의 TCP 및 SSL 핸드셰이크를 완료하는 데 유용하며, 이를 통해 네트워크 지연 시간을 줄일 수 있습니다.

참고: HTTP/2 연결을미리 설정하려면 허용된 프로토콜 목록에 QSslConfiguration::ALPNProtocolHTTP2 을 포함하여 sslConfiguration 에 setAllowedNextProtocols()를 호출하면 됩니다. HTTP/2를 사용할 때는 호스트당 하나의 연결만으로도 충분하므로, 호스트당 이 메서드를 여러 번 호출하더라도 네트워크 트랜잭션 속도가 빨라지지는 않습니다.

참고: 이 함수는 오류를 보고할 수 없습니다.

connectToHost(), get(), post(), put() 및 deleteResource()도 참조하십시오 .

void QNetworkAccessManager::connectToHostEncrypted(const QString &hostName, quint16 port, const QSslConfiguration &sslConfiguration, const QString &peerName)

hostName 로 지정된 호스트의 port 포트에 대한 연결을 시작하며, 이때 sslConfiguration 를 사용하고 peerName 를 인증서 유효성 검사에 사용될 hostName으로 설정합니다. 이 함수는 HTTPS 요청을 보내기 전에 호스트와의 TCP 및 SSL 핸드셰이크를 완료하는 데 유용하며, 이를 통해 네트워크 지연 시간을 줄일 수 있습니다.

참고: HTTP/2 연결을미리 설정하려면 sslConfiguration 에 setAllowedNextProtocols()를 호출하여 허용된 프로토콜 목록에 QSslConfiguration::ALPNProtocolHTTP2 를 포함시키면 됩니다. HTTP/2를 사용할 때는 호스트당 하나의 연결만으로도 충분하며, 즉 호스트당 이 메서드를 여러 번 호출한다고 해서 네트워크 트랜잭션 속도가 빨라지지는 않습니다.

참고: 이 함수는 오류를 보고할 수 없습니다.

이 함수는 오버로딩된 함수입니다.

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 요청의 경우 device outgoingData 는 항상 0이지만, 해당 작업에서 post() 및 put()에 전달되는 값은 입니다( QByteArray 변형은 QBuffer 객체를 전달합니다).

기본 구현은 setCookieJar()으로 설정된 쿠키 저장소(cookie jar)에 대해 QNetworkCookieJar::cookiesForUrl()를 호출하여 원격 서버로 전송할 쿠키를 가져옵니다.

반환된 객체는 열려 있는 상태여야 합니다.

QNetworkReply *QNetworkAccessManager::deleteResource(const QNetworkRequest &request)

request 의 URL로 식별되는 리소스를 삭제하라는 요청을 보냅니다.

참고: 이 기능은 현재 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 세션이 초기 핸드셰이크를 성공적으로 완료했을 때 발생합니다. 이 시점에서는 아직 사용자 데이터가 전송되지 않았습니다. 이 신호를 사용하여 인증서 체인에 대한 추가 검사를 수행할 수 있으며, 예를 들어 웹사이트의 인증서가 변경되었을 때 사용자에게 알리는 데 활용할 수 있습니다. 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에서 도입되었습니다.

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)

request URL로 지정된 서버에 사용자 정의 요청을 보냅니다.

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)

request URL로 식별되는 서버에 사용자 지정 요청을 보냅니다.

multiPart 메시지의 내용을 request 로 지정된 수신처로 보냅니다.

이 기능은 사용자 정의 Verb에 대한 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 로 설정합니다. 이 쿠키 항아리는 매니저가 처리하는 모든 요청에서 사용됩니다.

이 함수를 사용하여 쿠키 항아리 객체를, 쿠키를 영구 저장소에 저장하는 등의 추가 기능을 구현하는 클래스로 설정할 수 있습니다.

참고: ` QNetworkAccessManager `는 ` cookieJar ` 객체의 소유권을 가져갑니다.

cookieJar 가 이 QNetworkAccessManager 와 동일한 스레드에 있는 경우, 이 객체가 삭제될 때 쿠키 저장소도 함께 삭제되도록 cookieJar 의 부모를 설정합니다. 서로 다른 QNetworkAccessManager 객체 간에 쿠키 저장소를 공유하려면, 이 함수를 호출한 후 쿠키 저장소의 부모를 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이 됩니다. 실행되는 요청에 대해 설정된 요청별 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) 정책 목록을 반환합니다. “Strict-Transport-Security” 응답 헤더를 통해 HSTS 캐시가 업데이트된 경우, 이 목록은 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.