diff options
Diffstat (limited to 'src/kvilib/net/KviHttpRequest.cpp')
| -rw-r--r-- | src/kvilib/net/KviHttpRequest.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/kvilib/net/KviHttpRequest.cpp b/src/kvilib/net/KviHttpRequest.cpp index ae1804921..390b686b5 100644 --- a/src/kvilib/net/KviHttpRequest.cpp +++ b/src/kvilib/net/KviHttpRequest.cpp @@ -717,9 +717,9 @@ bool KviHttpRequest::processHeader(KviCString & szHeader) return false; } - KviCString * location = hdr.find("Location"); + KviCString * headerLocation = hdr.find("Location"); - if(!location) + if(!headerLocation || headerLocation->isEmpty()) { resetInternalStatus(); m_szLastError = __tr2qs("Bad redirect"); @@ -727,7 +727,18 @@ bool KviHttpRequest::processHeader(KviCString & szHeader) return false; } - KviUrl url(location->ptr()); + KviUrl url; + QString location(headerLocation->ptr()); + + if(location.startsWith('/')) + { + // relative redirect, use the old url and only update the path + url = m_connectionUrl; + url.setPath(location); + } else { + // absolute redirect + url.setUrl(location); + } if( (url.url() == m_connectionUrl.url()) || (url.url() == m_url.url())) @@ -1044,7 +1055,7 @@ void KviHttpRequest::dnsLookupDone(KviDnsResolver *d) { m_szIp = d->firstIpAddress(); delete m_pDns; - m_pDns = 0; + m_pDns = nullptr; QString tmp; tmp = QString(__tr2qs("Host %1 resolved to %2")).arg(m_connectionUrl.host(),m_szIp); emit status(tmp); |
