我可以使用QNetworkCookieJar
检索,存储和重新发送QNetworkManager
的cookie。多个QNetworkAccessManager
实例可以共享一个QNetworkCookieJar
。
到目前为止,我已经使用了多个QNetworkAccessManager
实例,每个类一个(需要在其中读取):
所以我可以在1..n QNetworkCookieJar
实例之间共享一个单例QNetworkAccessManager
或者只在一个QNetworkAccessManager
中共享一个,而在所有QNetworkRequest
中共享一个Jar。 QNetworkAccessManager
作为单个对象是否可行?文档说应该只有一个实例。所以我最好使用单例QNetworkAccessManager
吗?
什么是最合适的方式?
------编辑-------
据我所知,kkoehne's answer是正确的。这也是文档所说的。但是,在尝试这种方法时,我注意到了两个问题:
虽然现在每个Web服务只有一个QNetworkAccessManager
,但是更改为一个实例意味着我需要始终区分我刚刚从“完成”槽(从QNetworkAccessManager::finished
调用的槽)中收到的内容。这是可行的,但不方便。
我们以不同的方式来运作读者-不幸的是,我忘记在问题中提及这一点。这使得几乎不可能使用QNetworkAccessManager
的单个实例,因为成员函数是reentrant,但不是线程安全的。 (QNetworkAccessManager from ThreadPool)
相关:QNetworkAccessManager get/post from different thread possible?
最佳答案
我假设您是指QNetworkAccessManager
,而不是QNetworkManager
。
您应该更喜欢在应用程序中使用一个QNetworkAccessManager
。这不仅消除了同步QNetworkCookieJar
的任何需求,而且还确保了网络的最佳利用,并且共享了缓存的内容等。
如您所知,QtNetworkAccessManager documentation中也暗示了这一点:
一个QNetworkAccessManager应该足以容纳整个Qt
应用。
关于c++ - 在Qt应用程序中共享Cookie的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33466168/