diff --git a/src/network/access/qhttpheaders.cpp b/src/network/access/qhttpheaders.cpp index de2f7e148a4..683eab21d4d 100644 --- a/src/network/access/qhttpheaders.cpp +++ b/src/network/access/qhttpheaders.cpp @@ -974,6 +974,29 @@ void QHttpHeaders::removeAt(qsizetype i) d->headers.removeAt(i); } +/*! + Returns the value of the (first) header \a name, or \a defaultValue if it + doesn't exist. + + \sa value(QHttpHeaders::WellKnownHeader, QByteArrayView) +*/ +QByteArrayView QHttpHeaders::value(QAnyStringView name, QByteArrayView defaultValue) const noexcept +{ + for (const auto &h : std::as_const(d->headers)) { + if (headerNameIs(h, name)) + return h.value; + } + return defaultValue; +} + +/*! + \overload value(QAnyStringView, QByteArrayView) +*/ +QByteArrayView QHttpHeaders::value(WellKnownHeader name, QByteArrayView defaultValue) const noexcept +{ + return value(headerNames[qToUnderlying(name)], defaultValue); +} + /*! Returns the values of header \a name in a list. Returns an empty list if header with \a name doesn't exist. diff --git a/src/network/access/qhttpheaders.h b/src/network/access/qhttpheaders.h index 636f535c88a..98b4ad62d1a 100644 --- a/src/network/access/qhttpheaders.h +++ b/src/network/access/qhttpheaders.h @@ -237,6 +237,9 @@ public: Q_NETWORK_EXPORT void removeAll(WellKnownHeader name); Q_NETWORK_EXPORT void removeAt(qsizetype i); + Q_NETWORK_EXPORT QByteArrayView value(QAnyStringView name, QByteArrayView defaultValue = {}) const noexcept; + Q_NETWORK_EXPORT QByteArrayView value(WellKnownHeader name, QByteArrayView defaultValue = {}) const noexcept; + Q_NETWORK_EXPORT QList values(QAnyStringView name) const; Q_NETWORK_EXPORT QList values(WellKnownHeader name) const; diff --git a/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp b/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp index 8e6c77e3dd8..a88506fbfed 100644 --- a/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp +++ b/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp @@ -168,9 +168,10 @@ void tst_QHttpHeaders::accessors() QVERIFY(h1.has(QHttpHeaders::WellKnownHeader::Accept)); QVERIFY(h1.has("accept")); - // values() + // values()/value() #define EXISTS_NOT(H, N) do { \ QVERIFY(!H.has(N)); \ + QCOMPARE(H.value(N, "ENOENT"), "ENOENT"); \ const auto values = H.values(N); \ QVERIFY(values.isEmpty()); \ QVERIFY(H.combinedValue(N).isNull()); \ @@ -180,6 +181,7 @@ void tst_QHttpHeaders::accessors() const std::array expected = { __VA_ARGS__ }; \ static_assert(std::tuple_size_v == X); \ QVERIFY(H.has(N)); \ + QCOMPARE(H.value(N, "ENOENT"), expected.front()); \ const auto values = H.values(N); \ QCOMPARE(values.size(), X); \ QCOMPARE(values.front(), expected.front()); \