如何在QT中从HTTP请求中删除授权头(Authorization header)

3
我想要移除我的GET请求中默认添加的'Authorization: '头部。QT会自动添加它。
请求示例 -
GET https://mywebsiteurl.com/remote.php/webdav/3.txt HTTP/1.1
Authorization: Basic Og== User-Agent: Mozilla/5.0 (Linux) myapp/1.2.1
Connection: Keep-Alive Accept-Encoding: gzip, deflate Accept-Language: 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

Connection: Keep-Alive

Accept-Encoding: gzip, deflate

Accept-Language: en-US,*


可以使用像setHeader、setRawHeader这样的API,但没有完全删除标头的方法。

1个回答

0

QT 似乎通过信号/槽系统自动处理身份验证,与头文件分开,因此您无需考虑它。

您是否从 NetworkManager 处理了 authenticationRequired(QNetworkReply * reply, QAuthenticator * authenticator) 信号?如果在身份验证请求上得到错误结果,您可以通过在信号中重置认证器来绕过此问题。很抱歉这不是确定性答案,但如果有效,请告诉我!

每当最终服务器在传递所请求的内容之前请求身份验证时,将发出此信号。连接到此信号的插槽应该将凭据填入用于认证的对象中(可以通过检查回复对象来确定内容)。

QNetworkAccessManager 将在内部缓存凭据,并且如果服务器再次要求身份验证,则会发送相同的值而不会发出 authenticationRequired() 信号。 如果拒绝凭据,则会再次发出此信号。

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

另请参见 proxyAuthenticationRequired()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接