Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 需要身份验证的QNetworkAccessManager和POST_C++_Qt_Qt5 - Fatal编程技术网

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无效。不过,谢谢:)