2015-11-05 165 views
2

我想从我的GET请求中删除'授权:'标头。 QT默认添加它。如何从QT中的http请求中删除授权标头

样品的请求发射 -

GET https://mywebsiteurl.com/remote.php/webdav/3.txt HTTP/1.1


授权:基本噩==

的User-Agent:Mozilla的/ 5.0(Linux)的MYAPP/1.2 .1

连接:保持活动

接受编码:gzip,紧缩

接受语言:EN-US,*


示例代码 -

QNetworkAccessManager* mgr = new QNetworkAccessManager(); 
QNetworkRequest req; 
req.setUrl(QUrl("sampleURL")); 
mgr->get(req); 

结果应该是如下(没有授权头) -

GET https://mywebsiteurl.com/remote.php/webdav/3.txt HTTP/1.1


的User-Agent:Mozilla的/ 5.0(Linux)的MYAPP/1.2.1

连接:保持活动

接受编码:gzip,紧缩

接受语言:EN-US ,*


像setHeader,setRawHeader这样的API可用,但是没有办法完全删除标头。

回答

0

QT似乎通过信号/插槽系统自动处理认证,与标题分开,所以你不必考虑它。

您是否正在处理来自NetworkManager的authenticationRequired(QNetworkReply *回复,QAuthenticator * authenticator)信号。如果它对认证请求给出误报,你可以通过重置信号中的认证器来解决这个问题。对不起,这不是一个确定的答案,但让我知道它是否有效!

无论何时最终服务器在传送请求的内容之前请求认证 ,都会发出此信号。连接到此 信号的插槽应该填充验证器 对象中的内容凭证(可能是通过检查回复对象确定的 )。

QNetworkAccessManager将在内部缓存凭证,如果服务器需要再次验证, 将发送相同的值, 而不发送authenticationRequired()信号。如果它拒绝 凭证,该信号将再次发出。

注意:不可能使用QueuedConnection连接到此 信号,因为如果在信号返回时验证器未用 填充新信息,则连接将失败。

另请参阅proxyAuthenticationRequired()。