• 7757阅读
  • 3回复

QHttp通过ISA代理访问网络(NTLM认证) [复制链接]

上一主题 下一主题
离线wvins
 
只看楼主 倒序阅读 楼主  发表于: 2008-11-14
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
最近没有再使用Qt写代码,因为兄弟我呗QHttp的NTLM认证卡住了,
所以到这里来和大家讨论,
希望各兄弟姐妹有钱捧钱场,没钱捧人场。
顺便我也坛子宝地记录下自己的摸索过程,也算为后人做点贡献吧。

----------------------
int QHttp::setProxy (...)

QHttp supports non-transparent web proxy servers only, such as the Squid Web proxy cache server (from http://www.squid.org/). For transparent proxying, such as SOCKS5, use QNetworkProxy instead.
----------------------
这里文档中提到了non-transparent web proxy 和transparent proxy
透明代理和非透明代理,我不理解我只能两种方式都试一下。

哪位兄弟讲解一下怎么分辨透明代理和非透明代理的话,感激不尽

----------------------
参考了部分资料,连接如下
http://www.isacn.org/bbs/lofi.php?t13628.html
我们公司的ISA代理端口是8080,需要设置后才能访问网络,
那么我猜是非透明代理吧
[ 此贴被wvins在2008-11-14 16:44重新编辑 ]
离线wvins
只看该作者 1楼 发表于: 2008-11-14
有个疑问,怎么知道编译时候是否定义了某些宏?
--------------
我在代码中添加了
connect(http, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy, QAuthenticator *)),
                this, SLOT(onAuthenticate(const QNetworkProxy, QAuthenticator *)));
--------------
connect返回true,应该是连接上了。

可是onAuthenticate没有执行,
我看了相关的源代码
#ifndef QT_NO_NETWORKPROXY
                if (statusCode == 407)
                    emit q->proxyAuthenticationRequired(proxy, auth);
                else
#endif
                    emit q->authenticationRequired(hostName, port, auth);
--------------
也就是说如果在编译器没有指定QT_NO_NETWORKPROXY宏,就不支持proxyAuthenticationRequired
另一种可能就是代理模式不对,需要换种方式setProxy.

我怎么才能知道有没有定义QT_NO_NETWORKPROXY呢?我要怎么在编译器定义QT_NO_NETWORKPROXY呢?

自问自答:刚看到configure -help中有-D参数额外显示指定编译开关
[ 此贴被wvins在2008-11-14 16:17重新编辑 ]
离线wvins
只看该作者 2楼 发表于: 2008-11-14
我对不起大家!

Qt中使用代理是如此的简单。 (Qt 4.4.1)
以前在Delphi花了很久的时间去了解NTLM的握手过程,
我以为Qt也会这么复杂,谁知道只要添加一句就成了。
http.setProxy("csi-isa-02.XXX.com", 8080,"用户名","密码");
附上修改过的《Foundations_of_Qt_Development》中的QHttp例子
就添了上面一句话
源代码 http.rar (9 K) 下载次数:36
[ 此贴被wvins在2008-11-14 16:50重新编辑 ]
离线vrcats
只看该作者 3楼 发表于: 2008-11-14
哈哈,真逗
快速回复
限100 字节
 
上一个 下一个