2013-05-29 157 views
0

我使用qnetworkaccessmanager来制作HTTP请求。我连接的服务器的主机名(FQDN)在DNS有两个IP addresses,我需要控制使用哪一个。显而易见的解决方案(change the URL's hostname to IP address)不起作用,因为server在位置字段中发送了带有原始hostname302 redirect。如果我按照redirect,QT似乎随机选择它连接到哪个IPQNetworkAccessManager和DNS解析

有没有办法告诉qnetworkaccessmanagerURL使用上TCPconnect()水平给定IP address和使用Host header?如果没有,任何解决方法建议表示赞赏。

编辑:使用Qt 4.7.4

回答

1

这似乎工作,并且是一个简单的解决方法:设置QNetworkRequest的URL以包含要连接到主机部分的所需IP地址,还可以使用setCustomHeader(“主机”,“<服务器主机名称>”)以避免重定向。在我的测试中,QT会一直使用URL中的IP设置。

0

您应该能够建立一个自定义QNetworkRequest并指定QNetworkRequest::LocationHeader强制特定的目标网址重定向的情况。如果你看一下QNetworkAccessManager::sendCustomRequestQNetworkAccessManager::sendCustomRequest doc),并且QNetworkRequest::Attribute::RedirectionTargetQNetworkRequest::KnownHeaders它应该给你一些提示吧

(注脚:我使用的是哈麦丹文档作为正确的Qt文档被辞去的答案的时间)

+0

感谢您的建议,b它不会做我想要的。 sendCustomRequest()是为通常的GET,POST,PUT和DELETE以外的HTTP动词而设计的。此外,位置标题和重定向目标仅与响应相关。我需要修改请求,以便我可以控制将发送到哪个IP并获得非302响应。 – tpatja

+0

我正要写一个回应,并且看到你已经解决了它。 –