C++ 需要身份验证的QNetworkAccessManager和POST
我遇到了以下问题-我需要发布到一个需要身份验证的站点。我使用的C++ 需要身份验证的QNetworkAccessManager和POST,c++,qt,qt5,C++,Qt,Qt5,我遇到了以下问题-我需要发布到一个需要身份验证的站点。我使用的QNetworkReply*QNetworkAccessManager::post(const-QNetworkRequest&request,QIODevice*data)具有巨大的内容长度标题值(2GB)。问题是401回复会立即给出,但Qt会尝试上传所有数据,然后处理响应。因此,我想实现这样一种场景:我可以在内容长度标题设置为0的情况下启动POST,提供身份验证凭据,然后与计算的身份验证响应一起提供实际的内容长度标题值。但是,即使
QNetworkReply*QNetworkAccessManager::post(const-QNetworkRequest&request,QIODevice*data)
具有巨大的内容长度
标题值(2GB)。问题是401回复会立即给出,但Qt会尝试上传所有数据,然后处理响应。因此,我想实现这样一种场景:我可以在内容长度
标题设置为0的情况下启动POST,提供身份验证凭据,然后与计算的身份验证响应一起提供实际的内容长度
标题值。但是,即使我通过调用连接到void QNetworkAccessManager::authenticationRequired(QNetworkReply*reply,QAuthenticator*authenticator)的插槽中的setKnownHeader
设置标头,也会在第二次请求时发送原始值(0)。如果这是可能的,或者我必须通过QTcpConnection
在较低级别处理这件事,你有什么想法吗?倒转逻辑如何?首先尝试大小为0的帖子,只是为了检查你是否需要身份验证,请填写QAuthenticator
,然后使用真实数据重新提交?@peppe服务器的设计有点糟糕,无法在同一TCP连接中正确处理另一个请求。我已经尝试在authenticationRequired
信号中中止当前的cUnconnection,并动态提交一个新请求,但这似乎没有得到我提供给QAuthenticator
实例的值(我猜是因为调用了close
?)在下一个请求中,我又回到了同一个位置。然后,您可以自己计算HTTP Basic Auth头,并在手动设置头的情况下提交请求。@peppe-我没有遗漏任何内容,我无法修改原始请求的头。我尝试通过将传递给post()
的QNetworkRequest
上的初始内容长度设置为0,然后在获得authenticationRequired
信号后将其设置为真实长度-使用了原始值(我猜它只是在过程中的某个地方被复制)。问题是,我面临的是摘要,我可以通过一个请求检索nonce,并尝试在后续请求中增加nc
,但我必须确保服务器不会使该nonce无效。不过,谢谢:)