从 Qt 5.7 切换到 Qt 5.8 - "the proxy type is invalid for this operation"
Switching from Qt 5.7 to Qt 5.8 - "the proxy type is invalid for this operation"
我正在尝试使用 Qt 5.8 重新编译一个在 Qt 5.7 上运行良好的网络应用程序。但是,使用 Qt 5.8,服务器无法 listen()
:
int myPort = 52000; //some accessible port
QTcpServer* server = new QTcpServer();
if(!server->listen(QHostAddress::Any, myPort))
{
qDebug() << server.errorString();
}
返回的错误是:
The proxy type is invalid for this operation
我在受代理保护的公司网络上执行 运行 应用程序,但是在以前的 Qt 版本中,从来不需要进行任何类型的设置来解决这个问题。我以前从未见过 listen()
命令失败。
知道 Qt 5.8 中发生了什么变化或如何解决这个问题吗?
编辑:
虽然代理了整个网络,但在本地域上通信不需要代理,并且设置了 NO_PROXY
环境变量以避免代理本地连接。
在 Qt 5.8 中,默认使用系统代理设置,但似乎不遵守 NO_PROXY
设置。
在创建 QTcpServer
实例之前设置 QNetworkProxyFactory::useSystemConfiguration(false);
修复了错误(主要是通过恢复 Qt 5.7 默认值)。
在 QNetworkProxyFactory::useSystemConfiguration(false);
不可用的旧 Qt 版本(例如 5.4.3)中,可以使用以下序列:
QNetworkProxy proxy;
proxy.setType(QNetworkProxy::HttpProxy);
proxy.setHostName("proxy.example.com");
proxy.setPort(1080);
proxy.setUser("username");
proxy.setPassword("password");
QNetworkProxy::setApplicationProxy(proxy);
或者只是:
QNetworkProxy proxy;
QNetworkProxy::setApplicationProxy(proxy);
这对我有用,为了记录目的张贴在这里。
我正在尝试使用 Qt 5.8 重新编译一个在 Qt 5.7 上运行良好的网络应用程序。但是,使用 Qt 5.8,服务器无法 listen()
:
int myPort = 52000; //some accessible port
QTcpServer* server = new QTcpServer();
if(!server->listen(QHostAddress::Any, myPort))
{
qDebug() << server.errorString();
}
返回的错误是:
The proxy type is invalid for this operation
我在受代理保护的公司网络上执行 运行 应用程序,但是在以前的 Qt 版本中,从来不需要进行任何类型的设置来解决这个问题。我以前从未见过 listen()
命令失败。
知道 Qt 5.8 中发生了什么变化或如何解决这个问题吗?
编辑:
虽然代理了整个网络,但在本地域上通信不需要代理,并且设置了 NO_PROXY
环境变量以避免代理本地连接。
在 Qt 5.8 中,默认使用系统代理设置,但似乎不遵守 NO_PROXY
设置。
在创建 QTcpServer
实例之前设置 QNetworkProxyFactory::useSystemConfiguration(false);
修复了错误(主要是通过恢复 Qt 5.7 默认值)。
在 QNetworkProxyFactory::useSystemConfiguration(false);
不可用的旧 Qt 版本(例如 5.4.3)中,可以使用以下序列:
QNetworkProxy proxy;
proxy.setType(QNetworkProxy::HttpProxy);
proxy.setHostName("proxy.example.com");
proxy.setPort(1080);
proxy.setUser("username");
proxy.setPassword("password");
QNetworkProxy::setApplicationProxy(proxy);
或者只是:
QNetworkProxy proxy;
QNetworkProxy::setApplicationProxy(proxy);
这对我有用,为了记录目的张贴在这里。