Reputation: 682
I'm using qnetworkaccessmanager
for making HTTP
requests. The hostname (FQDN) of the server I connect to, has two IP addresses
in DNS
and I need to control which one to use. The obvious solution (change the URL's hostname to IP address
) does not work, because the server
sends back a 302 redirect
with the original hostname
in the location field. If I follow the redirect
, QT seems to randomly choose which IP it connects to.
Is there a way to tell qnetworkaccessmanager
to use a given IP address
on the TCP
connect()
level and use the Host header
from the URL
? If not, any workaround suggestions are appreciated.
Edit: using QT 4.7.4
Upvotes: 0
Views: 1831
Reputation: 682
This seems to work and is a simple workaround: set the QNetworkRequest's URL to contain the desired IP address to connect to in the host part, but also use setCustomHeader("Host", "<server hostname>") to avoid the redirection. In my tests, QT will always use the IP set in the URL.
Upvotes: 1
Reputation: 11754
You should be able to build a custom QNetworkRequest
and specify the QNetworkRequest::LocationHeader
to force a specific destination URL in case of a redirect. If you look at QNetworkAccessManager::sendCustomRequest
(QNetworkAccessManager::sendCustomRequest doc), and QNetworkRequest::Attribute::RedirectionTarget
and QNetworkRequest::KnownHeaders
it should give you some hints about it.
(footnote: I'm using the harmattan documentation as the proper Qt documentation is down as of time of answer)
Upvotes: 0